1、基本原理。
//To Do
2、实现。
//假定图中最大顶点个数为5
#define MAX_VERTEX 5
//采用二维数组来表示图
//两个顶点间的距离为1000 ,代表两顶点间无之间相连的边
int graph[MAX_VERTEX][MAX_VERTEX]=
{
{0,1,2,1000,4},
{1,0,1000,8,2},
{2,1000,0,1000,6},
{1000,8,1000,0,3},
{4,2,6,3,0}
};
//Dijsktra算法
void DijsktraAlgorithm(int graph[MAX_VERTEX][MAX_VERTEX],
unsigned nodeID)
{
bool added[MAX_VERTEX];
int minDistance[MAX_VERTEX];
for(int i=0;i<MAX_VERTEX;++i)
{
added[i]=false;
if(i!=nodeID)
{
minDistance[i]=graph[nodeID][i];
}
}
std::cout<<std::endl;
minDistance[nodeID]=0;
added[nodeID]=true;
for(int i=0;i<MAX_VERTEX-1;++i)
{
unsigned index=-1;
unsigned minDis=unsigned(-1);
for(int j=0;j<MAX_VERTEX;++j)
{
if(added[j]==false&&minDistance[j]<minDis)
{
index=j;
minDis=minDistance[j];
}
}
added[index]=true;
std::cout<<"index: "<<index<<std::endl;
std::cout<<"minDistance: "<<minDis<<std::endl;
for(int k=0;k<MAX_VERTEX;++k)
{
if(graph[k][index]+graph[index][nodeID]<minDistance[k])
{
minDistance[k]=graph[k][index]+graph[index][nodeID];
}
}
}
}
//测试函数
int main()
{
DijsktraAlgorithm(graph,0);
return 0;
}
3、运行截图。