矩阵的最短路径

int findshortcurt()
{
    int base[4][4]={{1,3,5,9},{8,1,3,4},{6,6,6,6},{8,8,8,0}};
    int dp[4][4]={{0,},{0,}};
    dp[0][0] = base[0][0];
    int i,j;
    /*求出矩阵的第一行和第一列的步骤值*/
    for(i=1;i<4;i++)
    {
        dp[0][i] += dp[0][i-1]+base[0][i];
    }
    for(i=1;i<4;i++)
    {
        dp[i][0] += dp[i-1][0] + base[i][0];
    }
    /*求dp矩阵其他位置的数dp[i][j]*/
    for(i=1;i<4;i++)
    {
        for(j=1;j<4;j++)
        {
            dp[i][j] = minValue(dp[i-1][j],dp[i][j-1])+ base[i][j];
        }
    }
    printf("\r\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%d ",dp[i][j]);
        }
        printf("\r\n");
    }
    return 0;
}
/*
1   4  9 18 
9   5  8 12 
15 11 14 18 
23 19 22 18 
*/
### MATLAB中实现矩阵最短路径算法 在MATLAB中,可以通过Floyd-Warshall算法来计算任意两个节点间的最短路径距离以及对应的路径链。此方法的核心在于构建一个二维数组`dist`用于存储各节点间最短路径的距离,并通过另一个二维数组`path`记录中间节点的信息以便后续重建具体的路径。 以下是基于上述描述的具体实现方式: #### 实现步骤说明 1. 初始化邻接矩阵 `a` 表示图的边权值关系,其中无穷大表示无直接连接[^2]。 2. 构建初始距离矩阵 `b` 和路径矩阵 `path`,分别初始化为输入邻接矩阵及其转置之和与零矩阵。 3. 遍历所有可能的中间节点 `k`,更新每一对节点 `(i, j)` 的最短路径长度及对应路径上的中间节点编号。 4. 输出最终得到的距离矩阵 `b` 及路径矩阵 `path`,后者可用于进一步提取实际路径序列。 下面是完整的MATLAB代码示例: ```matlab clear; clc; % 定义常量M代表极大值(即两节点不连通) M = 10000; % 创建加权有向图的邻接矩阵A a(1,:) = [0,50,M,40,25,10]; a(2,:) = [zeros(1,2),15,20,M,25]; a(3,:) = [zeros(1,3),10,20,M]; a(4,:) = [zeros(1,4),10,25]; a(5,:) = [zeros(1,5),55]; a(6,:) = zeros(1,6); % 转化成对称矩阵B作为无向图处理 b = a + a'; % Path matrix initialization to store intermediate nodes information. path = zeros(size(b)); % Core part of the Floyd algorithm implementation starts here. for k = 1:size(b,1) for i = 1:size(b,1) for j = 1:size(b,1) if b(i,j) > (b(i,k) + b(k,j)) % Update shortest distance between node 'i' and 'j'. b(i,j) = b(i,k) + b(k,j); % Record new intermediary vertex into path matrix at position (i,j). path(i,j) = k; end end end end disp('Distance Matrix:'); disp(b); disp('Path Information Matrix:'); disp(path); ``` 运行以上脚本后可以获取到两点之间的最小成本路径数值还有构成该条路线所需经过哪些额外顶点的知识。 #### 如何解读结果? - **距离矩阵 (`b`):** 显示了从任何起点到达终点所需的最少花费或者说是总权重。 - **路径信息矩阵(`path`) :** 提供了解析特定路由时所需要的指引数据;当查询某个具体线路比如从第X个地点前往Y处的最佳行程安排,则只需参照这个表格里相应位置填写的内容即可得知途中需不需要借助其他站点过渡,以及如果是的话确切应该是哪一个编号的位置充当跳板角色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值