最短路径+输出路径

该代码使用C++编程,通过Floyd-Warshall算法找出图中所有点对之间的最短路径。程序首先初始化图,然后通过三重循环更新每个节点对之间的最短距离。最后,提供一个函数按逆序输出从终点到起点的最短路径。
摘要由CSDN通过智能技术生成

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int mp[maxn][maxn], pre[maxn][maxn];
int n, m;
void init()
{
    memset(mp, 0x3f, sizeof mp);
    for(int i = 1; i <= n; ++i) mp[i][i] = 0;
    for(int i = 1; i <= n; ++i)
    for(int j = 1; j <= n; ++j)
    pre[i][j] = i;
}
void Folyd()
{
    for(int k = 1; k <= n; ++k)
    for(int i = 1; i <= n; ++i)
    for(int j = 1; j <= n; ++j)
    {
        if(mp[i][j] > mp[i][k]+mp[k][j])
        {
            mp[i][j] = mp[i][k]+mp[k][j];
            pre[i][j] = pre[k][j];
        }
    }
}
void PrintPath(int start, int end)
{
    int k = end;
    while(k != start)
    {
        printf("%c", k+96);
        k = pre[start][k];
    }
    printf("%c\n", k+96);
}
int main()
{
    char uu, vv;int w;
    cin >> n >> m; init();
    char ss[100];getchar();
    gets(ss);
    for(int i = 1; i <= m; ++i)
    {
        cin >> uu >> vv >> w;
        int u=uu-96;int v=vv-96;
        mp[u][v] = mp[v][u] = w;
    }
    Folyd();
    char sss,ee;
    cin>>sss>>ee;
    int s=sss-96;
    int e=ee-96;
   // cout<<mp[s][e]<<endl;
    PrintPath(e, s);
    return 0;
}


 路径输出是倒序的,所以将起点和终点交换一下带入PrintPath()即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值