运行Matlab程序后,我得到的矩阵每行和每列只有一个条目。
Mat(:,:,1) = [0 0.3; 0.9 0] - stage 1
Mat(:,:,2) = [0.7 0; 0 0.4] - stage 2
Mat(:,:,3) = [0 0.1; 0.5 0] - stage 3
如果我在第(i,j)位置有条目,则表示该(当前)阶段第i个节点与下一个(未来)第j个节点连接,并且条目值表示其路径权重。
如上例所示:
Mat(:,:,1)
表示第1阶段的第1个节点与第2阶段的第2个节点连接,第1阶段的第2个节点与第2阶段的第1个节点连接。
Mat(:,:,2)
表示第2阶段的第1个节点与第3阶段的第1个节点连接,第2阶段的第2个节点与第3阶段的第2个节点连接。
Mat(:,:,3)
表示第3阶段的第1个节点与第4阶段的第2个节点连接,第3阶段的第2个节点与第4阶段的第1个节点连接。
然后,阶段1到阶段4的连接路径可以与权重一起给出:
path1=[0.3, 0.4, 0.5]
path2=[0.9, 0.7, 0.1]
但我不知道如何使用Matlab代码获取这两个path1和path2向量。这是我为2 x 2矩阵运行的最简单的例子,但我的实际情况是具有#n路径的一般n×n矩阵。
当给出所有Mat(:,,,n)矩阵时,有人可以帮我用matlab来获取这些路径吗?
答案 0 :(得分:1)
首先创建隐式图的邻接矩阵。然后执行DFS以查找从第一阶段开始的所有路径:
<强> script.m 强>
Mat = zeros(2,2,3);
Mat(:,:,1) = [0 0.3;0.9 0];
Mat(:,:,2) = [0.7 0;0 0.4];
Mat(:,:,3) = [0 0.1;0.5 0];
Z = size(Mat,3);
N = size(Mat,1);
adjacency = zeros( (Z+1) * N );
for z=1:size(Mat,3)
for r=1:size(Mat,1)
for c=1:size(Mat,2)
if Mat(r,c,z) > 0
adjacency( (z-1)*N + r , (z)*N + c) = Mat(r,c,z);
end
end
end
end
for i=1:N
dfs( adjacency, i, [])
end
<强> dfs.m 强>
function dfs(adj, node, path_)
flag = 0;
for i=1:size(adj,2)
if adj(node, i) > 0
flag = 1;
dfs(adj,i,[path_ adj(node,i)])
end
end
if flag==0
path_
end
end
<强>输出强>
path_ =
0.3000 0.4000 0.5000
path_ =
0.9000 0.7000 0.1000