1 题目编号:1009
2 题目内容:
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
3 解题思路形成过程:用floyd解法,因为这个解法在用例少的情况下运用比较好,效率比较高;如果用例多的话就用TLE,那时再用别的解法。
4 代码:
#include<iostream>
#include<cstring>
using namespace std;
int map[102][102],n;
void floyd(int s,int e)
{
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(map[i][k]&&map[k][j]&&(map[i][k]+map[k][j]<map[i][j]||map[i][j]==0))
map[i][j]=map[i][k]+map[k][j];
cout<<map[s][e]<<endl;
}
int main()
{
int m,a,b,c;
while(cin>>n>>m)
{
if(n==0&&m==0) break;
memset(map,0,sizeof(map));
while(m--)
{
cin>>a>>b>>c;
map[a][b]=c;
map[b][a]=c;
}
floyd(1,n);
}
return 0;
}