#include<iostream> #include<fstream> using namespace std; const int INF = 0X3f3f3f; const int maxn = 101; int g[maxn][maxn]; int prev[maxn]; int vis[maxn]; int cost[maxn]; void dijkstra(int src, int V) { int i, j, minc = INF; for(i=1; i<=V; i++) cost[i] = g[src][i]; memset(vis, 0, sizeof(vis)); memset(prev, -1, sizeof(prev)); vis[src] = 1; cost[src] = 0; int pre = src; for(i=1; i<V; i++) { minc = INF; for(j=1; j<=V; j++) { if(cost[j] > cost[pre] + g[pre][j] && !vis[j]) { cost[j] = cost[pre] + g[pre][j]; prev[j] = pre; } } for(j=1; j<=V; j++) { if(cost[j] < minc && !vis[j]) { pre = j; minc = cost[j]; } } vis[pre] = 1; } } int main() { //freopen("in.txt", "R", stdin); int V, E; while(scanf("%d%d", &V, &E)!=EOF) { if(V==0) break; int f, t, w; memset(g, INF, sizeof(g)); for(int i=0; i<E; i++) { scanf("%d%d%d", &f, &t, &w); g[f][t] = w; } dijkstra(1, V); for(i=1; i<=V; i++) printf("%d ", cost[i]); printf("/n"); } return 0; }