题意:
输入路口(点)数n,路(线)数m,
已知连通路a[i],b[i],权重c[i],
求指定点1到点n的权重。
题解:
将原有线的权重正反记录,
将经过点i的点全部连通并记录新线的权重,
可以得到所有点与点之间的权重。
#include<iostream>
#include<cstring>
using namespace std;
const int N=100+5;
int main()
{
int n,m,a,b,c;
int t[N][N];
while(cin>>n>>m&&n&&m){
memset(t,-1,sizeof(t));
for(int i=0;i<m;i++){
cin>>a>>b>>c;
t[a][b]=c;
t[b][a]=c;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if((t[i][j]==-1||t[i][j]>t[i][k]+t[k][j])&&t[i][k]!=-1&&t[k][j]!=-1)
t[i][j]=t[i][k]+t[k][j];
cout<<t[1][n]<<endl;
}
}