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 ...
随机推荐
- js-JavaScript高级程序设计学习笔记2
第四章 变量.作用域和内存问题 1.ES变量包含两种不同数据类型的值--基本类型值(5种基本数据类型)和引用类型值(保存在内存中的对象,所有引用类型值都是Object的实例) 2.只能给引用类型值动态 ...
- Java中的异常处理:何时抛出异常,何时捕获异常?
今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况).而hadoop中很多方法的声明是有异常抛出的, ...
- HDFS源码分析:NameNode相关的数据结构
本文主要基于Hadoop1.1.2分析HDFS中的关键数据结构. 1 NameNode 首先从NameNode开始.NameNode的主要数据结构如下: NameNode管理着两张很重要的表: 1) ...
- Matlab的实时编辑器(Live Script)
Matlab的实时编辑器(Live Script) 看到伟哥换用了matlab2016a,里面集成了acf行人检测算法,感觉挺好的,索性也从matlab2014a跨越到matlab2016a. 安装后 ...
- hdu 5147 树状数组
题意:求满足a<b<c<d,A[a]<A[b],A[c]<A[d]的所有四元组(a,b,c,d)的个数 看到逆序对顺序对之类的问题一开始想到了曾经用归并排序求逆序对,结果 ...
- 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考
I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...
- centos安装163源
cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.cp wget http://mirrors.163.com/.help/CentO ...
- MySql的一些操作
我们安装mysql时一开始root用户如果没设置的话是可以没有密码的,所以,如果需要设置密码,则 格式:mysql> set password for 用户名@localhost = passw ...
- 通过Minimal版的iso安装CentOS7之后升级Desktop
重新安装了CentOS7,但是使用的是Minimal的iso镜像安装的,所以安装之后只有文本界面,这里记录一下重新安装图形界面的过程. 连接网络 通过文本界面登陆后是没有连接网络的,所以需要修改配置连 ...
- 分布式ID生成器
最近会写一篇分布式的ID生成器的文章,先占位.借鉴Mongodb的ObjectId的生成: 4byte时间戳 + 3byte机器标识 + 2byte PID + 3byte自增id 简单代码: imp ...