题意:求两点之间的最短距离,而且还是赤裸裸的,用的算法dijkstra。 代码: #include <stdio.h> #define MAX 2000000 int map[1020][1020]; int shortl[1020][1020]; int dijkstra(int map[][1020],int n,int begin,int end); int main() { int i , j , k; int t,n; int dist; scanf("%d%d",&t,&n); for(i = 1; i <= n; i++) for(j = 1;j <= n;j++) map[i][j] = MAX; for(k = 0 ; k< t; k++) { scanf("%d%d%d",&i,&j,&dist); if( dist < map[i][j]) { map[i][j] = dist; map[j][i] = map[i][j]; } } printf("%d/n",dijkstra(map,n,1,n)); return 0; } int dijkstra(int map[][1020],int n,int begin,int end) { int i,k; int min,min_; int bools[1020],dist[1020]; for(i =1; i <= n; i++) bools[i] = 0; for(i = 1 ;i <= n; i++) dist[i] = map[begin][i]; bools[begin] = 1; for(k = 2;k <= n; k++) { min=MAX; for(i = 1; i <= n;i++) { if(dist[i]<min && bools[i]==0) { min = dist[i]; min_ = i; } } bools[min_] = 1; if(min_ == end) return min; for(i = 1 ; i <= n; i++) //更新最短距离 { if(bools[i]==0 && map[min_][i] < MAX) if(map[min_][i]+dist[min_] < dist[i]) dist[i] = map[min_][i] + dist[min_]; } } return min; }