C语言实现Dijkstra算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现Dijkstra算法相关的知识,希望对你有一定的参考价值。
如果所示的txt路径数据,要求读取此数据实现Dijkstra算法,输入起点、终点显示最短路径,求可编译运行的c语言代码,最好尽可能多的注释,谢谢!
参考技术A #include<stdlib.h> #define INFINITY 1000000000 //最大距离#define MAX_NODES 1024 //最大节点数
int n,dist[MAX_NODES][MAX_NODES]; //dist[i][j]表示从 i 到 j 的距离 void shortest_path(int s, int t, int path[])
struct state
int predecessor; //前驱节点
int length; //到起始点的距离
enum permanent, tentative label;
state[MAX_NODES];
int i,k,min;
struct state * p;
for(p=&state[0]; p<&state[n]; p++)
p->predecessor = -1;
p->length = INFINITY;
p->label = tentative;
state[t].length = 0;
state[t].label = permanent;
k = t; //k 是当前工作节点
do
for(i=0; i<n; i++)
if(dist[k][i]!=0 && state[i].label==tentative)
if(state[k].length+dist[k][i]<state[i].length)
state[i].length = state[k].length+dist[k][i];
state[i].predecessor = k;
k=0;
min=INFINITY;
for(i=0; i<n; i++)
if(state[i].label==tentative && state[i].length<min)
k=i;
min=state[i].length;
state[k].label = permanent;
while(k!=s);
i=0;
k=s;
do
path[i++] = k;
k = state[k].predecessor;
while(k>=0);
以上是关于C语言实现Dijkstra算法的主要内容,如果未能解决你的问题,请参考以下文章