dijkstra算法求最短路
艾兹格·W·迪科斯彻 (Edsger Wybe Dijkstra,1930年5月11日~2002年8月6日)荷兰人。 计算机科学家,毕业就职于荷兰Leiden大学,早年钻研物理及数学,而后转为计算学。曾在1972年获得过素有计算机科学界的诺贝尔奖之称的图灵奖,之 后,他还获得过1974年 AFIPS Harry Goode Memorial Award、1989年ACM SIGCSE计算机科学教育教学杰出贡献奖、以及2002年ACM PODC最具影响力论文奖。
艾兹格·W·迪科斯彻(Edsger Wybe Dijkstra)
Dijkstra算法C代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MAXINT 32767
#define MAXNUM 6 char *str = "ABCDEF";
void dijkstra(int *dist, int *prev, int (*A)[MAXNUM], int v0);
void findPath(int *dist, int *prev, int start, int end); int main()
{ int A[MAXNUM][MAXNUM] = {{, , , MAXINT, MAXINT, MAXINT},
{, , , , MAXINT, MAXINT},
{, , , , , MAXINT},
{MAXINT, , , , , },
{MAXINT, MAXINT, , , , },
{MAXINT, MAXINT, MAXINT, , , },
};
int dist[MAXNUM] = {};
int prev[MAXNUM] = {};
int v0 = , i = ; dijkstra(dist, prev, A, v0); findPath(dist, prev, v0, ); //for(i = 0; i < MAXNUM; i++)
{
// printf("%d ", prev[i]);
} system("pause");
return ;
} void findPath(int *dist, int *prev, int start, int end)
{
int tmp = prev[end];
int *rst = (int*)calloc(MAXNUM, sizeof(int));
int cnt = , i = ;
rst[cnt] = end;
cnt++;
if(tmp == start)
{
rst[cnt] = tmp;
}
else
{
while(tmp != start)
{
rst[cnt] = tmp;
tmp = prev[tmp];
cnt++;
}
rst[cnt] = tmp;
} //printf("%d\n", cnt);
for(i = cnt; i >= ; i--)
{
printf("%c", str[rst[i]]);
if(i != )
{
printf("->");
}
}
printf(" %d\n", dist[end]); free(rst);
rst = NULL; } void dijkstra(int *dist, int *prev, int (*A)[MAXNUM], int v0)
{
int S[MAXNUM];
int n = MAXNUM, i = , j = ;
for (i = ; i < n; i++)
{
dist[i] = A[v0][i];
S[i] = ;
if(dist[i] == MAXINT)
{
prev[i] = -;
}
else
{
prev[i] = v0;
// printf("%c前驱%c\n", str[i], str[v0]);
}
}
dist[v0] = ;
S[v0] = ; for(i = ; i < n; i++)
{
int mindist = MAXINT;
int u = v0;
for(j = ; j < n; j++)
{
if((!S[j]) && dist[j] < mindist)
{
u = j;
mindist = dist[j];
}
}
S[u] = ; for(j = ; j < n; j++)
{
if((!S[j]) && A[u][j] < MAXINT)
{
if(dist[u] + A[u][j] < dist[j])
{
dist[j] = dist[u] + A[u][j];
prev[j] = u;
// printf("%c前驱%c\n", str[j], str[u]);
}
}
}
}
}
代码仅供参考
参考资料
- 百度百科 http://baike.baidu.com/link?url=LWr-IQcqdJoG9qAz_kmQ6kIybBDqEqj0bo3dk-t3A_vtd0P_Ee1EvCWm3iQokRWmregR_vLSt7zgB_wSVqvCaq
- 最短路径—Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html
dijkstra算法求最短路的更多相关文章
- 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】
Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...
- Dijkstra算法求最短路模板
Dijkstra算法适合求不包含负权路的最短路径,通过点增广.在稠密图中使用优化过的版本速度非常可观.本篇不介绍算法原理.只给出模板,这里给出三种模板,其中最实用的是加上了堆优化的版本 算法原理 or ...
- Dijkstra算法求单源最短路径
Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店 ...
- Dijkstra算法求最短路径(java)(转)
原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...
- _DataStructure_C_Impl:Dijkstra算法求最短路径
// _DataStructure_C_Impl:Dijkstra #include<stdio.h> #include<stdlib.h> #include<strin ...
- 【POJ - 2139】Six Degrees of Cowvin Bacon (Floyd算法求最短路)
Six Degrees of Cowvin Bacon Descriptions 数学课上,WNJXYK忽然发现人缘也是可以被量化的,我们用一个人到其他所有人的平均距离来量化计算. 在这里定义人与人的 ...
- 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径
自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...
- 通俗易懂理解——dijkstra算法求最短路径
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止 ###基本思想 通过Dij ...
- HDU 1688 Sightseeing&HDU 3191 How Many Paths Are There(Dijkstra变形求次短路条数)
Sightseeing Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
随机推荐
- 【BZOJ-4518】征途 DP + 斜率优化
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 230 Solved: 156[Submit][Status][ ...
- AutoIt3(AU3)开发的分辨率快速设置工具
项目相关地址 源码:https://github.com/easonjim/Resolution_Settings bug提交:https://github.com/easonjim/Resoluti ...
- poj1279 半平面交
题意:没看懂= = sol:在纸上随便画两下就可以看出,答案即按逆时针方向建立line,求它们的半平面交的面积. 模板题.注意输出答案时输出ans+eps,否则可能会出现结果为-0.00的情况. #i ...
- StringBuilder类与String类的区别
String对象是不可改变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的String对象相关的 ...
- 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 1 The Two Fundamental Rules (1.5-1.6)
Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...
- ASP.NET MVC 给ViewBag赋值Html格式字符串的显示问题总结
今天再给自己总结一下,关于ViewBag赋值Html格式值,但是在web页显示不正常; 例如,ViewBag.Content = "<p>你好,我现在测试一个东西.</p& ...
- 强大的windbg定位内存泄露,两句命令搞定!
1.简单配置在windbg程序目录下有个gflags.exe,运行后设置: 运行CMD.EXE,输入"D:\Debugging Tools for Windows (x86)\gflags. ...
- ThreadPoolExecutor机制
一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务: 2.Execu ...
- oneM2M标准发展神速 实现万物联网的愿景
http://m2m.iot-online.com/news/2013102224849.html oneM2M则将负责解决独立于接取网路中通用的M2M服务层的关键需求:使其可更方便地嵌入于各种软硬体 ...
- Processing Images
https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_ ...