implemented with a two-dimensional array
int e[10][10];
int dis[10], book[10];
int inf = 99999999;
int n, m;
int main(){
cin >> n >> m; // n:vertex m:edge
//initialize
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i == j) e[i][j] = 0;
else e[i][j] = inf;
//read in edge
int t1, t2, t3;
for(int i = 1; i <= m; i++){
cin >> t1 >> t2 >> t3;
e[t1][t2] = t3;
}
//initialize dis array
for(int i = 1; i <= n; i++)
dis[i] = e[1][i];
//initialize book array
for(int i = 1; i <= n; i++)
book[i] = 0;
book[1] = 1;
//core code
for(int i = 1; i <= n-1; i++){
int min = inf;
int v, u;
//find the nearest vertex to vertex 1
for(int j = 1; j <= n; j++)
if(book[j] == 0 && dis[j] < min){
min = dis[j];
u = j;
}
book[u] = 1;
for(v = 1; v <= n; v++)
if(e[u][v] < inf)
if(dis[v] > dis[u] + e[u][v])
dis[v] = dis[u] + e[u][v];
}
//output
for(int i = 1; i <= n; i++)
cout << dis[i] << " ";
return 0;
}