简单题意
给出起点和终点,找出从起点到终点的最短路线。
解题思路形成过程
就是floyd算法。用一个二维数组保存两个地点之间的距离,之后遍历每两个点(A,B)搭配,看如果两个点之间再插入一个点(C),如果A-C-B比A-B短,那么更新数组的值,最后直接输出数组中代表起点和终点的值
感想
做Problem G做了好长时间没做出来,放弃了。。。。这个题还是可以的换换口味
AC代码
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
int map[102][102],n;
void solve(int s,int e){
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int 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()
{
ifstream cin("in.txt");
int m,a,b,c;
while(cin>>n>>m&&(m||n)){
memset(map,0,sizeof(map));
while(m--){
cin>>a>>b>>c;
map[a][b]=c;
map[b][a]=c;
}
solve(1,n);
}
return 0;
}