#include <algorithm>
#include <cstring>
#include <iostream>
#define MAX 1009
#define INF 0x3f3f3f3f
using namespace std;
int g[MAX][MAX],d[MAX],n,m;
int vst[MAX];
void Dijkstra(int x){//只能测量x到各点的最短路,如果想要测出 点m到点n 和 点x到点y 的最短路,需要两次调用。
fill(d,d+MAX,INF);//初始.
fill(vst,vst+MAX,0);//初始化.
d[x]=0;//x点到其本身的距离设为0.
for(int i=1;i<=m;i++){
int u=-1,MIN=INF;
for(int j=1 ;j<=m;j++){
if(vst[j]==0&&d[j]<MIN){
u=j;
MIN=d[j];//找出和点x距离最近的一个点。
}
}
if(u==-1) return ;//表示已经没有和点x连通的点了,结束该函数。
vst[u]=1;//标记最近的点。
for(int v=1;v<=m;v++){
if(vst[v]==0 && g[u][v]!=INF && d[u]+g[u][v]<d[v]){//更新各点到点x的距离。
d[v]=d[u]+g[u][v];
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
int k1,k2;
while(cin>>m>>n){
if(m==0&&n==0){
break;//简单的跳出指令。
}
fill(g[0],g[0]+MAX*MAX,INF);//仍然是初始化233333.
for(int i=0;i<n;i++){//输入邻接矩阵中的值。
cin>>k1>>k2;
cin>>g[k1][k2];
g[k2][k1]=g[k1][k2];
}
Dijkstra(1);//这个程序是计算从点1到点m的距离,应该根据实际需要更改。
cout<<d[m]<<endl;
}
return 0;
}
Dijkstra算法小笔记
猜你喜欢
转载自blog.csdn.net/StarrYooSkY/article/details/79224791
今日推荐
周排行