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