加权有向图的邻接矩阵

时间:2014-10-17 19:44:52

标签: algorithm data-structures graph-theory shortest-path

A)假设A是带有G顶点的加权有向图n的邻接矩阵,其中A[i,j]是边i到{{}}的权重{1}}。如果没有这样的边缘j。矩阵A[i ,i]=0。如果我们使用+代替*并使用A^K= A*A*A*...A代替+,则Slot min不会将路径A^k [i,j]的权重描述为i最多j个边缘。我想找到这个问题展示什么东西?

B)假设k是加权有向图(无循环和多边)AG顶点的邻接矩阵,其中n是边的权重A[i,j]i。如果没有这样的边j,对于evrey A[i ,j]=infinity我们有i。矩阵A[i, i]=0。插槽A^K= A*A*A*...A显示什么东西?最小重量?或...?

任何想法?

编辑:我的意思是这些算法在图中找到了哪个?找到最大重量?最小重量?一无所获?

1 个答案:

答案 0 :(得分:0)

B = A^K

B[i, j]代表i .. j的最短路径,完全k步。怎么样?

给定一个矩阵A如果我们将A与其自身多次发生会发生什么?

    // Initialize a matrix result which would be the matrix obtained by A*A
    vector< N, vector<int> (N, INF) > result;
    REP(i,0,N) REP(j,0,N) REP(k,0,N)
        result[i][j] = min(result[i][j], (A[i][k] + A[k][j]));

最初A[i, j]直接从j转到i。正如您可以看到result[i, j] minimum result[i, j]A[i, k] + A[k, j] result[i, j]所以我们得出结论:i .. j包含使用一个中间人从k开始的路径顶点k's。因为我们为所有result[i, j]迭代这个,A^k包含恰好遍历两条边的最小成本路径。我们现在可以概括为A[i, i]

如果我们将0设置为k == i会怎样?

这允许自循环。在上面的代码中 result[i, j] = min(result[i,j], A[i, i] + A[i, j]) result[i, j] = min(result[i,j], A[i,j)] // since A[i, i] = 0;

result[i, j]

这意味着如果我们可以使用一条或两条边,现​​在i .. j将表示从B[i, j]到达的最短路径。

所以现在i .. j代表k的最短路径,几乎i .. j步。{/ p>

同样,我们可以使用相同的概念来计算k中完全采用A[i, j]步的路径。如果我们在1i其他j之间有优势,那么您可以将0初始化为A^k

{{1}}会为您提供所需的结果。