大”病“初愈
来道水题
注意两个城市之间或有多条路径
比原来的短则更新
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#define inf 0xffffff
using namespace std;
int main()
{
int n,m,i,j,k;
int sta,end;
int x,y,dis;
int map[222][222];
while(~scanf("%d %d",&n,&m))
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
map[i][j]=inf;
for(i=0;i<n;i++)
map[i][i]=0;
for(i=0;i<m;i++)
{
scanf("%d %d %d",&x,&y,&dis);
if(map[x][y]>dis)
{
map[x][y]=dis;
map[y][x]=dis;
}
}
for(k = 0;k < n;k++)
for(i = 0;i < n;i++)
for(j = 0;j < n;j++)
map[i][j] =min(map[i][j], map[i][k]+map[k][j]);
scanf("%d %d",&sta,&end);\
if(map[sta][end]==inf)
printf("-1\n");
else
printf("%d\n",map[sta][end]);
}
return 0;
}