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

本文共 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

你可能感兴趣的文章
perl学习5--子程序中自动识别参数
查看>>
C#--GDI+的PathGradientBrush类的使用
查看>>
sql server 查询任务管理器数据
查看>>
让office2007支持公司痕迹保留
查看>>
【android】使用handler更新UI
查看>>
提取图标
查看>>
C++中的static
查看>>
BMP图像存储格式
查看>>
信息的传递 认识自身5
查看>>
Apache将整合Google Wave功能
查看>>
PowerDesigner 的简单使用(逻辑模型转物理模型和生成sql语句)
查看>>
H凹变换—lhMorpHConcave
查看>>
通配符 与 正则表达式
查看>>
mochiweb 源码阅读(十五)
查看>>
JavaScript中的内置对象--Number对象
查看>>
10 个方便的创建 CSS 特效的工具
查看>>
把二元查找树转变成排序的双向链表
查看>>
Eclipse调试Bug的七种常用技巧
查看>>
Msys/MinGW与Cygwin/GCC(转)
查看>>
添加一个关闭ProgressDialog的静态方法:
查看>>