#include <stdio.h>
int main()
{
int a[101][101];
int i,j,c,d,e,n,m,min,u,k;
int book[101];
int dis[101];//1到其余点的的距离
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i==j)
a[i][j]=0;
else a[i][j]=10000;
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&c,&d,&e);
a[c][d]=e;
}
book[1]=1;
for (i=2;i<=n;i++)
book[i]=0;
for (i=1;i<=n;i++)
dis[i]=a[1][i];//初始化dis[i]为1直接到i的距离
for (i=1;i<=n-1;i++)//1到剩下n-1个点的距离
{
min=10000;
for (j=1;j<=n;j++)
{
if ((min>dis[j])&&(book[j]==0))
{
min=dis[j];//找到在未确定的点中离1最近的点,并记录下来
u=j;
}
}
book[u]=1;
for (k=1;k<=n;k++)
if ((a[u][k]!=10000)&&(dis[u]+a[u][k]<dis[k]))//若u能到k且k值不确定且比原来直接到小(只要判断u->i是否为无穷大,因为1->u已经在之前判断过)
dis[k]=dis[u]+a[u][k];
}
for (i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}
迪杰斯特拉邻接矩阵存储方式
最新推荐文章于 2024-05-25 19:29:43 发布