用于获取权重

时间:2016-10-07 02:40:31

标签: matlab matrix graph-algorithm

运行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来获取这些路径吗?

1 个答案:

答案 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