题目描述
输入
输出
示例输入
3 2 1 2 1 1 3 1 1 0
示例输出
1 0
提示
#include <stdio.h>
#include <stdlib.h>
#define inf 0x3f3f3f
int mp[150][150];
int min(int x,int y)
{
if(x>y)
return y;
else return x;
}
int zuiduan(int n)
{
int i,j,k;
for(k=1;k<=n;k++)//保证所有点都遍历一遍
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)//由i到j所有的点都被k分开所以k要在最外层保证被所有点分一遍
{
if(i!=j)
{
mp[i][j]=min((mp[i][k]+mp[k][j]),mp[i][j]);
}
}
}
return mp[1][n];
}
int main()
{
int n,m,i,j,a,b,c;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
mp[i][j]=0;
else
mp[i][j]=inf;
}
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(mp[a][b]>c)
mp[a][b]=mp[b][a]=c;//避免两个数不一样
}
int w=zuiduan(n);
printf("%d\n",w);
}
return 0;
}