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
是加权有向图(无循环和多边)A
与G
顶点的邻接矩阵,其中n
是边的权重A[i,j]
到i
。如果没有这样的边j
,对于evrey A[i ,j]=infinity
我们有i
。矩阵A[i, i]=0
。插槽A^K= A*A*A*...A
显示什么东西?最小重量?或...?
任何想法?
编辑:我的意思是这些算法在图中找到了哪个?找到最大重量?最小重量?一无所获?
答案 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]
步的路径。如果我们在1
和i
其他j
之间有优势,那么您可以将0
初始化为A^k
。
{{1}}会为您提供所需的结果。