抓狂 = =。。 最水最短路,好久没做了,做一道试试 = =。结果让我检查了好久 = =。 开始忘了让它弄成双向的那句话= =。 然后一直RE = =。发现 t和n输入反了 = =。。。我去死吧 = = #include <iostream> #include <stdlib.h> #include <limits.h> #include <string.h> using namespace std; int map[1010][1010]; int dis[1010]; int n,pos,sum; void init() { for(int i=0; i<1001; i++) { for(int k=0; k<1001; k++) map[i][k] = INT_MAX; map[i][i] = 0; } for(int i=0; i<1001; i++) dis[i] = INT_MAX; sum = 0; } void Dijkstra() { int used[1010]; memset(used,0,sizeof(used)); int now = pos; dis[now] = 0; used[now] = 1; for(int i=0; i<n; i++) { for(int k=1; k<=n; k++) if( map[now][k] != INT_MAX && dis[now] + map[now][k] < dis[k] ) dis[k] = dis[now] + map[now][k]; int min = INT_MAX; for(int k=1; k<=n; k++) if( dis[k] < min && !used[k] ) min = dis[now = k]; used[now] = 1; } } int main() { int from,to,len,t; init(); cin >> t >> n; pos = n; for(int i=1; i<=t; i++) { cin >> from >> to >> len; if( len < map[from][to] ) map[from][to] = map[to][from] = len; } Dijkstra(); cout << dis[1] << endl; return 0; }