【程序代码】
#include <bits/stdc++.h>
using namespace std;
int main() {
int e[10][10],dis[10],book[10];
int n,m;
int t1,t2,t3;
int t,minn;
int inf=0x3f3f3f3f;
cin>>n>>m; //n顶点数,m边数
//初始化
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;
//读入边
for(int i=1; i<=m; i++) {
cin>>t1>>t2>>t3;
e[t1][t2]=t3;
}
//初始化dis数组,这里是1号顶点到其余各个顶点的初始路程
for(int i=1; i<=n; i++)
dis[i]=e[1][i];
//book数组初始化
for(int i=1; i<=n; i++)
book[i]=0;
book[1]=1;
//Dijkstra算法核心语句
for(int i=1; i<=n-1; i++) { //找到离1号顶点最近的顶点
minn=inf;
for(int j=1; j<=n; j++) {
if(book[j]==0 && dis[j]<minn) {
minn=dis[j];
t=j;
}
}
book[t]=1;
for(int v=1; v<=n; v++) {
if(e[t][v]<inf) {
if(dis[v]>dis[t]+e[t][v])
dis[v]=dis[t]+e[t][v];
}
}
}
//输出最终的结果
for(int i=1; i<=n; i++)
cout<<dis[i]<<" ";
return 0;
}
/*
input:
6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
output:
0 1 8 4 13 17
*/