题意:给定n个点,m条路,求起点到终点的最短距离
解题思路:刚开始不会做,就去看了下课件,发现课件里讲的floyd-washall算法正好就是适用于这道题的,所以就采用了floyd算法
源码:
#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(2,n);
}
return 0;
}
Problem I
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 41 Accepted Submission(s) : 22
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2