博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dijkstra算法+堆优化处理
阅读量:5061 次
发布时间:2019-06-12

本文共 1939 字,大约阅读时间需要 6 分钟。

给你坐标最大为n,边数为m的无向边,输入m条,为x->y,长度为k

求起点(st)到终点(ed)的最短路径

dij()算法分析:

有三个数组,d[]用于记录最短路径,mp用于存储边,vis[]用于标记(标记过的点为已经计算出最短路径的点)

先重置vis[]

在对起点可以一次到达的位置载入到d[]中

设置d[0]=0(起点到起点自然为0)

标记vis[0]

寻找离起点最近的点(且没有被标记过的),然后标记它(已经求出最短距离)

然后更新其它与这个最近点有关的点

#include
#include
#include
#include
#define inf 0x3f3f3fusing namespace std;int n,st,ed,d,v;int mp[201][201];int vis[201],dis[201];void dij()///广度优先搜索思想{ memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++)///初始化原始路径(起始位置可以一次到达的点的距离) dis[i]=mp[st][i]; dis[st]=0; vis[st]=1; for(int i=1;i<=n;i++) { int mins=inf; for(int j=1;j<=n;j++)///用于寻找最近(小)的点且没有标记过的点 { if(mins>=dis[j]&&!vis[j]) v=j,mins=dis[j]; } vis[v]=1; ///对该点进行标记(已经是最短距离) for(int k=1;k<=n;k++)///更新其他点的最短距离(当前) if(!vis[k]) dis[k]=min(dis[k],dis[v]+mp[v][k]); } if(dis[ed]>=inf) printf("-1\n"); else printf("%d\n",dis[ed]);}int main(){ while(scanf("%d",&n)&&n!=0) { memset(mp,inf,sizeof(mp)); memset(dis,0,sizeof(dis)); scanf("%d%d",&st,&ed); dij(); } return 0;}

 堆优化代码

#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f#define maxn 1024using namespace std;struct node{ int to,dis; node (int a,int b){to=a,dis=b;} friend bool operator <(node a,node b) { if(a.dis==b.dis) return a.to
b.dis; }};vector
mp[maxn];int dis[maxn],vis[maxn];int n,m,st,ed;void Dijkstra(){ memset(dis,inf,sizeof(dis)); dis[st]=0; priority_queue
que; que.push(node(st,dis[st])); while(!que.empty()) { node x=que.top(); que.pop(); for(int i=0;i
x.dis+y.dis) { dis[y.to]=x.dis+y.dis; que.push(node(y.to,dis[y.to])); } } } if(dis[ed]

:

 

 

转载于:https://www.cnblogs.com/wangtao971115/p/10358394.html

你可能感兴趣的文章
graphite custom functions
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
oracle连接的三个配置文件(转)
查看>>
pytho logging
查看>>
Python内置函数(29)——help
查看>>
oracle导出/导入 expdp/impdp
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
Android TextView加上阴影效果
查看>>
OA项目设计的能力③
查看>>
《梦断代码》读书笔记(三)
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
输入月份和日期,得出是今年第几天
查看>>
pig自定义UDF
查看>>
Kubernetes 运维学习笔记
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>