作者:silence、2012年5月17日
本文参考:Google,数据结构(C语言)
本人声明:个人原创,转载请注明出处。
一 简介
无向图中求单源到其他顶点的最短距离
二 重点
通过对路径的迭代更新,求出最小值
#include <cstdlib>
#include <iostream>
#define M 65535
using namespace std;
//单源到其他点的最短路径
void dijkstra(int g[][6],int s,int n)
{
int flag[n];
int dis[n];
for(int i = 0;i < n;i++)
{
dis[i] = g[s][i];
flag[i] = 0;
}
flag[s] = 1;
int count = 0;
while(count++ < n-1)
{
int min = 65535;
int select;
for(int i = 0; i< n;i++)
{
if((flag[i]==0)&&(dis[i]<min))
{
select = i;
min = dis[i];
}
}
flag[select] = 1;
for(int i = 0;i< n ;i++)
{
//更新所有经过select点的最小值
if((flag[i]==0)&&(dis[i]>dis[select]+g[select][i]))
dis[i] = dis[select] + g[select][i];
}
}
for(int i = 0;i<n;i++)
{
cout<<"V"<<s<<"-->"<<"V"<<i<<": "<<dis[i]<<endl;
}
}
int main(int argc, char *argv[])
{ int array[6][6] = {{0,20,15,M,M,M},
{2,0,4,M,10,30},
{M,M,0,M,M,10},
{M,M,M,0,M,M},
{M,M,M,15,0,10},
{M,M,M,4,M,0}};
dijkstra(array,0,6);
system("PAUSE");
return EXIT_SUCCESS;
}