#include<stdio.h>
int main()
{
int e[10][10],dis[10],book[10];
int i,j,a,b,c,n,m,inf=99999999,v,u,min;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(i==j)
e[i][j]=0;
else
e[i][j]=inf;
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&a,&b,&c);
e[a][b]=c;
}
//初始化dis[]数组
for(i=1; i<=n; i++)
dis[i]=e[1][i];
//初始化ook[]数组
for(i=1; i<=n; i++)
book[i]=0;
book[1]=1;
//Dijkstra算法核心语句
for(j=1; j<=n-1; j++)//循环n-1次
{
//求出离1最近的点
min=inf;
for(i=1; i<=n; i++)
{
if(book[i]==0&&dis[i]<min)
{
min=dis[i];
u=i;
}
}
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];
}
}
}
for(i=1; i<=n; i++)
printf("%d ",dis[i]);
return 0;
}
/*
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
运行结果
0 1 8 4 13 17
*/
Dijkstra-算法-----单源最短路
最新推荐文章于 2022-12-04 18:08:49 发布