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算法的主要内容,如果未能解决你的问题,请参考以下文章

dijkstra算法和floyd算法(C语言)

最短路径问题之Dijkstra算法(C语言)

Dijkstra算法(原理及python,c++实现)

求dijkstra算法的C实现

Dijkstra最短路径算法(C#实现)

用C或C++实现求最短路径的Dijkstra算法