题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2544
简单最短路问题
#include<stdio.h> #define INF 1<<30 int n,m,map[105][105],dis[105]; bool bellman_ford(int start,int end) { int i,j,k; for(i = 1; i <= n; i++) dis[i] = INF; dis[start] = 0; for(k = 1; k <= n; k++) { for(i = 1; i <= n; i++) { for(j = 1 ; j <= n; j++) { if(map[i][j] < INF && dis[j] > dis[i] + map[i][j]) dis[j] = dis[i] + map[i][j]; } } } for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) if(map[i][j] < INF && dis[j] > dis[i] + map[i][j]) return false; } return true; } int main() { int i,j,a,b,c; while(~scanf("%d%d",&n,&m) && (n||m)) { for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) map[i][j] = (i == j ? 0 : INF); while(m--) { scanf("%d%d%d",&a,&b,&c); map[a][b] = map[b][a] = c; } bellman_ford(1,n); printf("%d\n",dis[n]); } return 0; }