数据结构之Dijkstra算法
来源:互联网 发布:最好的网络电话软件 编辑:程序博客网 时间:2024/05/16 19:22
单源最短路径
通常称有向路径上的第一个顶点为源点,称最后一个顶点为终点。从某个源点到其他顶点的最短路径又称为单源最短路径。
单源最短路径的问题:给定一个带权图G=(V,E)和图中的一个原点V1,分别求出从V1到图G中其他每个顶点的最短路径长度,即路径上权值的总和。
Dijkstra算法基本思想
设置俩个顶点的集合S和T=V-S,集合S中存放已找到最短路径的顶点,集合T中存放当前还未找到最短路径的顶点。初始状态下,集合S中只包含源点V1,然后不断从集合T中选取到顶点V1路径长度最短的顶点Vi加入到集合S中,集合S 每加入一个新的顶点Vi,都要修改顶点Vi到集合T中剩余顶点的最短路径长度值,集合T中各顶点新的最短路径长度值为原来的最短路径长度值与顶点Vi的最短路径长度值加上Vi到该顶点的路径长度值中较小值。此过程不断重复,直到集合T的顶点全部加入集合S中为止。
算法辅助图:
完整代码
#include<stdio.h>#define max 100int creatcost(int cost[][max]){ int vexnum,arcnum,i,j,k,v1,v2,w; printf("\ninput the vexnum and arcnum:"); scanf("%d,%d",&vexnum,&arcnum); for(i=1;i<=vexnum;i++) for(j=1;j<=vexnum;j++) cost[i][j]=9999; for(k=1;k<=arcnum;k++) { printf("v1,v2,w="); scanf("%d,%d,%d",&v1,&v2,&w); cost[v1][v2]=w; } return vexnum;}void dijkstra(int cost[][max],int vexnum){ int path[max],s[max],dist[max],i,j,w,v,min,v1; printf("input soure node v1:"); scanf("%d",&v1); for(i=1;i<=vexnum;i++) { dist[i]=cost[v1][i]; s[i]=0; if(cost[v1][i]<9999) path[i]=v1; } s[v1]=1; for(i=1;i<=vexnum;i++) { min=9999; for(j=1;j<=vexnum;j++) if(s[j]==0&&(dist[j])<min) { min=dist[j]; w=j; } s[w]=1; for(v=1;v<=vexnum;v++) if(s[v]==0) if(dist[w]+cost[w][v]<dist[v]) { dist[v]=dist[w]+cost[w][v]; path[v]=w; } } printf("the v1 to others:\n"); for(i=2;i<=vexnum;i++) if(s[i]==1) { w=i; while(w!=v1) { printf("%d<--",w); w=path[w]; } printf("%d",w); printf(" %d\n",dist[i]); } else { printf("%d<--%d",i,v1); printf(" 9999\n"); }}int main(){ int vexnum; int cost[max][max]; vexnum=creatcost(cost); dijkstra(cost,vexnum); return 0;}
运行截图
总结
通过对Dijkstra算法的研究发现,判断是其算法的核心,通过标记和判断结合path[]数组的回溯功能,达到路径的判断。此算法是建立在邻接矩阵的基础之上的,看起来还是挺友善的。
阅读全文
0 0
- 数据结构之Dijkstra算法
- 数据结构之Dijkstra算法
- 算法与数据结构-单源最短路径之Dijkstra
- 数据结构 Dijkstra(迪杰斯特拉)算法
- 数据结构 图 Dijkstra算法
- 数据结构之(图最短路径之)Dijkstra(迪杰斯特拉)算法
- 数据结构之(图最短路径之)Dijkstra(迪杰斯特拉)算法
- 【数据结构与算法】 Dijkstra算法
- 【数据结构与算法】Dijkstra算法
- 算法之dijkstra算法
- 数据结构----dijkstra算法,单源最短路径
- 数据结构:单源最短路径--Dijkstra算法
- [数据结构] 邻接矩阵实现Dijkstra算法
- [数据结构]Dijkstra算法求单源最短路径
- 《数据结构实战》------------------------------------实现Dijkstra算法
- 数据结构:单源最短路径--Dijkstra算法
- 重学数据结构系列之——图论算法之Dijkstra算法
- 贪心算法之Dijkstra
- 51Nod-1267 4个数和为0【排序+有序组合查找】
- ZooKeeper学习第二期--ZooKeeper安装配置
- Wonderware fsGateway连INSQL,在平台的故障处理
- javaweb请求与响应验证码案例点击"看不清,换一张"切换图片的新思路
- Struts2中值栈
- 数据结构之Dijkstra算法
- NFS服务器安转和使用
- C++ 默认构造函数
- POJ3277-City Horizon
- 设计模式之职责链模式
- 微服务学习一服务化架构的演进历史
- python启动脚本--daemon形式
- 链表带环问题
- Vs2013中opencv的配置(添加属性表)