迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
#include<iostream>
using namespace std;
int main()
int edgs;
int points;
int dis[10];
int flag[10];
int infinity=9999999;
cin>>points>>edgs;
int edg[10][10];
for(inti-1;i<=points;i++)//初始化
for (int j=l;j<=points;j++)
if(i=-j)
edg[i][j]-
else
edg[i][j]- ②
int pointl,point2,quanzhi;
for(i-l;i<=edgs;i++)
cin>>pointl>>point2>>quanzhi;
edg[point1][point2]=
for(i=l;i<=points;i++)
dis[i]-edg[1][i];
for(i=l;i<=points;i++)
flag[i]-0;
flag[1]-1;
int min ,u;
for(i=l;i<=points-l;i++){//源点到源点不用比较,因次总的次数少一次
min-infinity;
for (int j=l;j<points;j++)
if(flag[]]==0&&dis[j]<min){//核心思想:依次比较出商源点最近的点min)
u=j/
flag[u]-1;
for (int v=l;v<=points;v++){//找出离源点最近的点后更新 dis 里面的源点到各个点的值是否最小if (edglu][v]<infinity)
if (dis[v]>dis[u]+edg[u][v])
dis[v]=
for(i-l;i<=points;i++)
cout<<dis[i]<<" ";
cout<<endl;
1处应填
infinity
dis[j]
0
1
2处应填
infinity
dis[j]
0
1
3处应填
quanzhi
0
inf
1
4处应填
j
dis[j]
fag[j]
i
5处应填
dis[u]
edg[ u][v]
dis[u]+edg[u][v]
infinity
发表评论