单源最短路径之dijkstra算法
来源:互联网 发布:java web静态资源分离 编辑:程序博客网 时间:2024/05/16 04:34
概念:该算法常用于路由算法或者作为其他图算法的一个子模块。常常用来计算一个图中某点到其他点的最短路径:例如该题:ccf2016094交通规划
算法思想:以起始点为中心,向外层层扩散。
设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。
(见算法导论翻译版第三版383页)
例如该图的单源最短路径
对应代码:
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=105;const int maxnum=10000;int arr[maxn][maxn];//存放点和点间权值bool v[maxn];int path[maxn];//存放访问点的记录int dist[maxn];//存放点路径int node,edge;int dijkstra(int s){ int i,j; memset(v,false,sizeof(v)); v[s]=true; for(i=0;i<node;i++)//更新dist数组 { dist[i]=arr[s][i]; path[i]=s; } int minnum;//最小值 int minindex;//最小值下标 for(i=0;i<node;i++) { if(i==s) continue; minnum=maxnum; for(j=0;j<node;j++) { if(dist[j]<minnum&&v[j]==false) { minnum=dist[j]; minindex=j;//找到了下一条权值最小的点 } } v[minindex]=true; for(j=0;j<node;j++)//更新dist数组 { if(v[j]==false&&arr[minindex][j]!=maxnum&&arr[minindex][j]+minnum<dist[j]) { dist[j]=arr[minindex][j]+minnum; path[j]=minindex; } } }}int main(){ int i,j,s,start,end,value; scanf("%d %d",&node,&edge); for(i=0;i<node;i++)//初始化数组值 { for(j=0;j<node;j++) { arr[i][j]=maxnum; if(i==j) arr[i][j]=0; } } printf("输入两点以及权值边:\n"); for(i=0;i<edge;i++)//赋值 { scanf("%d %d %d",&start,&end,&value); arr[start][end]=value; arr[end][start]=value; } //scanf("%d",arr[i][j]); printf("输入源点:\n"); scanf("%d",&s); dijkstra(s); for(i=0;i<node;i++)//测试点访问路径 printf("%d ",dist[i]); return 0;}
阅读全文
0 0
- 单源最短路径之Dijkstra算法
- 单源最短路径之Dijkstra算法
- 单源最短路径之dijkstra算法
- 【算法导论】单源最短路径之Dijkstra算法
- 算法与数据结构-单源最短路径之Dijkstra
- 单源最短路径问题之Dijkstra算法详解
- 贪心算法之单源最短路径Dijkstra
- 单源最短路径 dijkstra算法
- 单源最短路径Dijkstra算法
- Dijkstra 单源最短路径算法
- 单源最短路径 :Dijkstra 算法
- 单源最短路径(Dijkstra算法)
- 单源最短路径----------Dijkstra算法
- 单源最短路径Dijkstra算法
- 单源最短路径(Dijkstra算法)
- 单源最短路径 : Dijkstra 算法
- Dijkstra单源最短路径算法
- 算法 单源最短路径Dijkstra
- ibatis/mybatis模糊匹配
- http GET 和 POST 请求的优缺点和误区 --前端优化
- JSON.parse()和JSON.stringify()的区别
- Fiori2.0学习笔记-modules
- Linux下同步时间及自动运行命令
- 单源最短路径之dijkstra算法
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- python 2 与 python 3 的pip 区分问题
- lua学习笔记(4)——lua配置文件和table使用
- 工作密钥、2磁道解密数据及密码计算
- 【1】 Kotlin学习之 BaseActivity.kt 文件
- XYNUOJ 1127: 分数加减法X
- IntelliJ Idea 常用快捷键列表
- python学习笔记(基础)