#include <iostream> using namespace std; int n, m; int a[100][100], book[100], dis[100]; const int INF = 0x3f3f3f3f; int main(){ int que[100]; int head, tail; cin>>n>>m; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ if(i == j){ a[i][j] = 0; }else { a[i][j] = INF; } } } int tx, ty, d; for(int i=1; i<=m; i++){ cin>>tx>>ty>>d; a[tx][ty] = d; } head = 1; tail = 1; book[1] = 1; que[tail++] = 1; dis[1] = 0; for(int i=2; i<=n; i++){ dis[i] = INF; } while(head < tail){ int cur = que[head]; for(int i=1; i<=n; i++){ if(a[cur][i] < INF && dis[i] > dis[cur] + a[cur][i]){ dis[i] = dis[cur] + a[cur][i]; if(book[i] == 0){ book[i] = 1; que[tail++] = i; } } } book[cur] = 0; //出队后取消标记,以后还有可能继续进队 head++; } for(int i=1; i<=n; i++){ cout<<dis[i]<<' '; } return 0; } /*测试数据 5 7 1 2 2 1 5 10 2 3 3 2 5 7 3 4 4 4 5 5 5 3 6 */