#include<cstdio>
#include<cstring>
#include<string>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
int main(){
int e[1111][1111],dis[1111],book[1111],n,m,t1,t2,t3,u,min;
int inf=0x3f3f3f;//用inf存储一个我们认为的正无穷值
while(~scanf("%d %d",&n,&m)){ //读入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<=n;i++){ //读入矩阵
scanf("%d %d %d",&t1,&t2,&t3);
e[t1][t2]=t3;
}
for(int i=1;i<=n;i++){ //初始化dis数组,这里是1号顶点到其余各顶点的初始路程
dis[i]=e[1][i];
}
for(int i=1;i<=n;i++){ //book数组初始化
book[i]=0;
book[1]=1;
}
//Dijkstra算法核心语句
for(int i=1;i<=n-1;i++){
//找到离1号顶点最近的顶点
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(int 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];
}
}
}
}
//输出最终结果
printf("%d\n",dis[n]);
}
return 0;
}
Dijkstra算法模板---单源最短路---目前最好理解的233
最新推荐文章于 2024-04-12 15:55:24 发布