#include<iostream>
#include<stdio.h>
using namespace std;
//dijkstra算法
//重点,,dis数组,book数组,核心
int a[10][10]; //邻接矩阵
int book[11];
int dis[11];
int main()
{
int inf=99999; // 无穷大
int n,m,t1,t2,t3; //上数据
scanf("%d %d",&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;
//初始化
}
}
for(int i=1;i<=m;i++){
scanf("%d %d %d",&t1,&t2,&t3);
a[t1][t2]=t3;
}
//初始化book数组和dis数组
for(int i=1;i<=n;i++){
book[i]=0;
}
book[1]=1;
for(int k=1;k<=n;k++)
dis[k]=a[1][k];
//从一开始,进入dijkstra算法】
//进行n次更新
int Min;
int u,v;
for(int i=1;i<=n-1;i++){
Min=inf;
//接下来找到距离一最近的点
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(a[u][v]<inf&&dis[v]>dis[u]+a[u][v])
dis[v]=dis[u]+a[u][v];
//松弛,,,重点
}
}
//输出
for(int i=1;i<=n;i++){
cout << dis[i]<< endl;
}
return 0;
}
dijkstra 最短路算法
最新推荐文章于 2022-02-28 17:20:00 发布