获取带权值连接路径的matlab代码

Matlab code to get connection paths with weights

在我 运行 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 的第一个节点与阶段 2 的第二个节点连接,阶段 1 的第二个节点与阶段 2 的第一个节点连接。

Mat(:,:,2) 表示阶段 2 的第一个节点与阶段 3 的第一个节点连接,阶段 2 的第二个节点与阶段 3 的第二个节点连接。

Mat(:,:,3) 表示阶段 3 的第一个节点与阶段 4 的第二个节点连接,阶段 3 的第二个节点与阶段 4 的第一个节点连接。

那么,stage-1到stage-4的连接路径可以给出权重:

path1=[0.3, 0.4, 0.5]

path2=[0.9, 0.7, 0.1]

但是我不知道如何使用Matlab代码得到这两个path1和path2向量。这是我 运行 最简单的例子,用于 2 x 2 矩阵,但我的实际情况是具有 #n 路径的一般 n x n 矩阵。

当给出所有 Mat(:,:,n) 矩阵时,有人可以帮助我使用 matlab 获得这些路径吗?

首先创建隐式图的邻接矩阵。然后进行一次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