可编译通过,请放心使用
Dijkstra算法
#include <iostream>
#define INF (INT_MAX-0x1ffffff)
//建立图的带权邻接矩阵
int Mgraph[9][9] = {
//0, 1, 2, 3, 4, 5, 6, 7, 8
{INF,4, INF,INF,INF,INF,INF,8, INF},//0
{4, INF,8, INF,INF,INF,INF,3 , INF},//1
{INF,8, INF,7, INF,4, INF,INF,2 },//2
{INF,INF,7 ,INF,9, 14, INF,INF,INF},//3
{INF,INF,INF,9, INF,10, INF,INF,INF},//4
{INF,INF,4, 14, 10 ,INF,2, INF,INF},//5
{INF,INF,INF,INF,INF,2, INF,6, 6 },//6
{8 ,3 ,INF,INF,INF,INF,6 ,INF,1 },//7
{INF,INF,2, INF,INF,INF,6 ,1 ,INF},//8
};
void dijkstra(int Mgraph[9][9],int start,int end)
{
/*准备工作开始*/
bool selected[9];
int parent[9];
int distance[9];
for (int i = 0; i < 9; i++)
{
selected[i] = false;
parent[i] = -1;
distance[i] = INF;
}
selected[start] = true;
parent[start] = start;
distance[start] = 0;
int v = start,minroad = 0;
/*准备工作结束*/
while (v != end)
{
for (int i = 0; i < 9; i++)
if ((distance[i] > minroad + Mgraph[v][i]) && (!selected[i]))
{
distance[i] = Mgraph[v][i] + minroad;
parent[i] = v;
}
minroad = INF;
for (int i = 0; i < 9; i++)
{
if (distance[i] == INF)
continue;
else if (minroad > distance[i] && (!selected[i]))
{
minroad = distance[i];
v = i;
}
}
selected[v] = true;
}
}
int main()
{
dijkstra(Mgraph,0,4);
return 0;
}