图结构练习——最短路径(Floyd算法)
Problem Description
给定一个带权无向图,求节点1到节点n的最短路径。
Input
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
Output
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
Sample Input
3 2
1 2 1
1 3 1
1 0
Sample Output
1
0
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,m,a[105][105],i,j,k,d,b,c;
while(cin>>n>>m)
{
memset(a,0x3f3f3f,sizeof(a));
for(i=1;i<=n;i++)
a[i][i]=0;
for(i=1;i<=m;i++)
{
cin>>d>>b>>c;
if(a[d][b]>c)
a[d][b]=a[b][d]=c;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=k&&i!=j&&k!=j)
if(a[i][k]+a[k][j]<a[i][j])
a[i][j]=a[i][k]+a[k][j];
cout<<a[1][n]<<endl;
}
return 0;
}