【问题标题】:Matlab code to get connection paths with weightsMatlab 代码获取带权重的连接路径
【发布时间】:2016-10-07 20:08:09
【问题描述】:

在我运行 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)-th 位置有入口,则表示此(当前)阶段 i-th 节点与下一个(未来)阶段 j-th 节点连接,并且 entry 的值表示其路径权重。

如上例:

Mat(:,:,1) 表示第一阶段的第一个节点与第二阶段的第二个节点相连,第一阶段的第二个节点与第二阶段的第一个节点相连。

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

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

【问题讨论】:

  • 如果答案不够清楚,请告诉我。

标签: matlab matrix graph-algorithm


【解决方案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

【讨论】:

  • 这很好用@Tempux。在某些情况下,我需要大于或等于 Mat 矩阵行数的列数(即 m x n;n>=m)。然后,每一行都有一个条目,但在不同的列中。我应该在你的代码中进行调整。 (对不起,这在原来的问题中没有提到)
  • @Frey 这没有意义。你的矩阵应该是 N*N。
  • 是的@Tenpux,很难解释我在做什么。例如第一阶段的#m 个节点与第二阶段可用的#n 个节点(n>=m)中的#m 个节点连接。当我为 Mat 输出运行代码时,我得到 Mat 矩阵 m x n 但它的 #(n-m) 列为零条目。所以在第二阶段丢弃那些节点。同样,在第 2 阶段选定的 #m 个节点与第 3 阶段可用的 #n 个节点中的 #m 个节点连接。同样运行所有#S 阶段,并获得#S Mat 矩阵。我可以在您的好代码的帮助下尝试一下。我接受你的回答。
  • 你也可以帮我解决这个问题:stackoverflow.com/questions/39716704/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多