博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dijkstra算法的C语言程序
阅读量:6543 次
发布时间:2019-06-24

本文共 1295 字,大约阅读时间需要 4 分钟。

Dijkstra用来寻找图的结点间最短路径,通常是指定一个起始结点后,寻找从该结点出发,到达各个结点的最短路径。该算法是有关最短路径问题的一个算法。由Dijkstra于1959年提出。

百度百科:。

维基百科:。

参考链接

程序说明:图存储在二维数组中,即邻接矩阵中。使用s集合和vs集合辅助Dijkstra算法的过程,开始时将指定的开始结点放入s集合中,其他剩余的结点放入vs集合中,从s集合到vs集合的边中找出一个代价最小的边,然后将相关的结点从vs集合取出放入s集合,指定所有结点都在s集合为止。

中间结果和最后结果放在数组dist[]中。

程序:

/* Dijkstra算法程序 */#define MAX_INT (int)((unsigned)(-1) >> 1)#define MIN(x, y) ((x)>(y))?(y):(x)#define TRUE 1#define FALSE 0#include 
//假设有N个节点其中包含1个源点,N-1个终点求源点到其他节点的最短路径#define N 6int a[N][N];int dist[N];int prev[N];int s_set[N], s_count;int vs_set[N], vs_count;void createMatrix();void init(int s);void dijkstra();int main(void){ int i, j, s; createMatrix(); for(i=0; i
=0 && s<=N-1) { init(s); } else printf("input error!\n"); printf("first distance:\n"); for(i=0; i

输入数据(文件):

0 2 100 1 500 4 701 2 151 4 102 0 202 3 153 1 20 3 4 354 3 305 3 3-1 -1 -1
输出结果:

0  50  10  -1  70  -1  -1   0  15  -1  10  -1  20  -1   0  15  -1  -1  -1  20  -1   0  35  -1  -1  -1  -1  30   0  -1  -1  -1  -1   3  -1   0start node:1first distance:  2147483647           0          15  2147483647          10  2147483647result distance:  35    0   15   30   10 2147483647 result previous:   2    1    1    2    1    1

转载于:https://www.cnblogs.com/tigerisland/p/7564080.html

你可能感兴趣的文章
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
查看>>
四种方法校验数组中是否包含某个指定的字符串
查看>>
29、Java并发性和多线程-非阻塞算法
查看>>
安装OpenResty开发环境
查看>>
第0课 从0开始
查看>>
hadoop无法启动DataNode问题
查看>>
java泛型中<?>和<T>区别
查看>>
这里是指推送通知跟NSNotification有区别:
查看>>
用户ID的代码生成
查看>>
win7经常出现“关闭xxxx前您必须关闭所有会话框”
查看>>
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
查看>>
MongoDB 自己定义函数
查看>>
Summary Day30
查看>>
逆向输出回环数组
查看>>
高清摄像头MIPI CSI2接口浅解【转】
查看>>
C# CancellationTokenSource和CancellationToken的实现
查看>>
PCIE BAR空间
查看>>
如何用数学课件制作工具画角平分线
查看>>
VS2015 中统计整个项目的代码行数
查看>>