hdu2544
#include <iostream> //第一道用Dijkstra解的题 #include <cstring> using namespace std; #ifndef ONLINE_JUDGE #include <fstream> ifstream fin("test.txt"); #define cin fin #endif int n,m; const int INF = 1000010; int vis[200],dis[200]; int graph[200][200]; int main() { ios::sync_with_stdio(false); int a,c,b; while(cin >> n >> m) { if(!n && !m) break; memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) { if(i==j) graph[i][j] = 0; else graph[i][j] = INF; } for(int i = 1; i <= m; ++i) { cin >> a >> b >> c; graph[a][b] = graph[b][a] = c; } for(int i = 1; i <= n; ++i) { dis[i] = graph[i][1]; } vis[1] = 1; for(int i = 0; i < n; ++i) { int min = INF,t = 0; for(int j = 2; j <= n; ++j) if(!vis[j] && dis[j] < min) { min = dis[j]; t = j; } vis[t] = 1; for(int j = 1; j <= n; ++j) { if(!vis[j] && dis[j] > dis[t] + graph[t][j]) dis[j] = dis[t] + graph[t][j]; } } cout << dis[n] << endl; } return 0; }