// Dijkstra.cpp : Defines the entry point for the console application.
/*-----CODE FOR FUN-----------------
-------CREATED BY Dream_Whui--------
-------2015-2-15--------------------*/
//最短路径 Dijkstra算法
#include "stdafx.h"
#include "graph.h"
void ShortestPath_DIJ(MGraph G, int v0)
{
int i,j,v;
bool final[NAX_VERTEX_NUM]; //fianl[v]=TRUE,表示已经求得从V0->v的最短路径
unsigned int distence[NAX_VERTEX_NUM], min;//distence[j],表示顶点v0->顶点j的最短距离
for(i=0; i<G.vexnum; i++) //初始化
{
final[i] = FALSE;
distence[i] = G.arcs[v0][i].adj;
cout<<distence[i]<<endl;
}
distence[v0] = 0; //源点
final[v0] = TRUE;
for(i=1; i<G.vexnum; i++) //每次求得v0到某个顶点v的最短路径,并加v加入到S集
{
min = INFINITY;
for(j=0; j<G.vexnum; j++)
{
if(!final[j]) //顶点j在V-S中
if(distence[j] < min)//顶点j离v0顶点更近
{
min = distence[j];
v = j;
}
}
final[v] = TRUE;
for(j=0; j<G.vexnum; j++)//更新当前最短路径及距离
{
if(!final[j] && (min+G.arcs[v][j].adj < distence[j]))//由于INFINITY+10已经超出int的最大范围,因此将min和distence[j]定义为unsigned int类型
distence[j] = min+G.arcs[v][j].adj;
}
}
for(i=0; i<G.vexnum; i++)
{
cout<<G.vexs[v0]<<"->"<<G.vexs[i]<<"最短路径"<<distence[i]<<endl;
}
}
int main(int argc, char* argv[])
{
MGraph G;
CreateGraph(G);
ShortestPath_DIJ(G,0);
return 0;
}
数据结构--最短路径(Dijkstra算法)
最新推荐文章于 2024-08-15 11:28:31 发布