最短路-floyd

匿名 (未验证) 提交于 2019-12-03 00:19:01
#include <iostream> #include <bits/stdc++.h> #define inf 100000000; using namespace std; void floyd(int mmap[][1200],int n,int m) {     int a,b,c,i,j,k;     //初始化     for(i=1; i<=n; i++)     {         for(j=1; j<=n; j++)         {             if(i==j)             {                 mmap[i][j]=0;//自己到自己距离为0             }             else             {                 mmap[i][j]=inf;//其他还未联通的点默认为无穷大             }         }     }     for(i=1; i<=m; i++)     {         scanf("%d %d %d",&a,&b,&c);         if(mmap[a][b]>c)//避免出现一路多权         {             mmap[a][b]=c;             mmap[b][a]=c;//此处为无向图         }     }     //floyd核心代码     for(k=1; k<=n; k++)     {         for(i=1; i<=n; i++)         {             for(j=1; j<=n; j++)             {                 if(mmap[i][j]>mmap[i][k]+mmap[k][j])                 {                     mmap[i][j]=mmap[i][k]+mmap[k][j];                 }             }         }     }     scanf("%d %d",&a,&b);     printf("%d\n",mmap[a][b]);//输出任意两节点间的最短路 } int main() {     int n,m,mmap[1200][1200];     while(scanf("%d %d",&n,&m)!=EOF)     {         floyd(mmap,n,m);     }     return 0; } 


文章来源: 最短路-floyd
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!