最短路径Floyd算法

#include<iostream>
using namespace std;
int a[10][10];  //存储点与点之间的距离
int n;          //顶点数
int e;          //边数
const int inf=999999999;    //无穷大
int x,y,z;      //x到y的距离为z
int i,j,k;      //循环变量

void Create()
{
    cin>>n>>e;
    //初始化邻接矩阵
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
        {
            if(i==j)
                a[i][j]=0;
            else
                a[i][j]=inf;
        }

    for(i=1; i<=e; i++)
    {
        cin>>x>>y>>z;   //将x,y之间的距离置为z
        a[x][y]=z;
    }
}

void Floyd()
{
    for(k=1; k<=n; k++)         //进行n次迭代
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
            {
                if(a[i][k]<inf && a[k][j]<inf && a[i][j]>a[i][k]+a[k][j])//k为通过哪个点
                    //a[i][k]<inf&&a[k][j]<inf是防止a[i][k]+a[k][j]超出了int的最大范围
                    a[i][j]=a[i][k]+a[k][j];//通过其他点可以找到更短的路径
            }

    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(i!=j)
                cout<<i<<"号城市到"<<j<<"号城市最短路径为:"<<a[i][j]<<endl;
}

int main()
{
    Create();
    Floyd();
    return 0;
}
测试数据:
4 8
1 2 2
1 3 6
1 4 4
2 3 3
3 1 7
3 4 1
4 1 5
4 3 12




全部评论

相关推荐

07-15 14:14
门头沟学院 Java
7.10投递7.15感谢信
投递地平线等公司7个岗位
点赞 评论 收藏
分享
想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
Lorn的意义:你这标个前端是想找全栈吗?而且项目确实没什么含金量,技术栈太少了,边沉淀边找吧 现在学院本想就业好一点四年至少得高三模式两年加油吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务