解题报告:
这题就是求两个单源点之间的最小距离,属于最短路问题,由于数据量很小,只有100,所以这题可以用弗洛伊德也可以用迪杰斯特拉,都可以过,但是用迪杰斯特拉会快一点,但用弗洛伊德的代码会稍短一点,纯属裸的算法题,这里给出两种算法的代码:
弗洛伊德算法:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 const int MAX = 0xfffff; 5 int map[105][105]; 6 int main() { 7 int N,M,x,y,z; 8 while(scanf("%d%d",&N,&M)&&(N||M)) { 9 for(int i = 1;i<=N;++i) 10 for(int j = 1;j<=N;++j) 11 map[i][j] = (i==j? 0:MAX); 12 for(int i = 1;i<=M;++i) { 13 scanf("%d%d%d",&x,&y,&z); 14 map[x][y] = map[y][x] = z; 15 } 16 for(int i = 1;i<=N;++i) 17 for(int j = 1;j<=N;++j) 18 for(int k = 1;k<=N;++k) 19 map[j][k] = std::min(map[j][k],map[j][i]+map[i][k]); 20 printf("%d\n",map[1][N]); 21 } 22 return 0; 23 } 24