博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dijkstra算法【图论 - 最短路径】
阅读量:6992 次
发布时间:2019-06-27

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

dijkstra大神发明的算法

朴素的dijkstra算法时间复杂度为O(nn),只能处理包含正权边的图。

使用优先级队列或堆优化过的dijkstra算法时间复杂度为O(Nlog(N))

下面是优先级队列优化的dijkstra代码源码

/*input:点数 N,边数 M,起点S,终点T,以及M组路线(起点 终点 终点)*/#include 
#include
#include
#include
using namespace std;#define maxN 1024#define maxM 10240int n, m, s, t;struct node{ int to, cost, next;}edge[maxM<<1];int first[maxN], edgeCnt;int addEdge(int from, int to, int cost){ edge[edgeCnt].to = to; edge[edgeCnt].cost = cost; edge[edgeCnt].next = first[from]; return first[from] = edgeCnt++;}void buildGraph(){ int a, b, c; edgeCnt = 0; memset(first, -1, sizeof(first)); for(int i=0; i
b.cost; }};priority_queue
myQueue;int solve(){ struct qnode tmp; memset(dist, -1, sizeof(dist)); tmp.pos = s; tmp.cost = 0; myQueue.push(tmp); while(myQueue.size() > 0 && dist[t] == -1){ tmp = myQueue.top(); myQueue.pop(); if(dist[tmp.pos] != -1) continue; int from = tmp.pos; dist[from] = tmp.cost; for(int e = first[from]; e != -1; e = edge[e].next){ if(dist[edge[e].to] != -1) continue; tmp.pos = edge[e].to, tmp.cost = dist[from] + edge[e].cost; myQueue.push(tmp); } } return dist[t];}int main(){// freopen("1.txt", "r", stdin); scanf("%d %d %d %d", &n, &m, &s, &t); buildGraph(); cout << solve(); return 0;}

下面是朴素的dijkstra算法

#include
#include
#define maxa 1005#define INF 10000000int n,m;int dis[maxa];bool mark[maxa];int map[maxa][maxa];int mon[maxa];void dijkstra(int s){ int i,j,k,Min,visa,p; memset(mark,0,sizeof(mark)); for(i=1; i<=n; i++) { dis[i]=map[s][i]; } dis[s]=0; mon[s]=0; mark[s]=1; for(i=1; i

转载于:https://www.cnblogs.com/shengwang/p/9738856.html

你可能感兴趣的文章
学习笔记之简单工厂设计模式
查看>>
Spring+SpringMVC+MyBatis+Maven框架整合
查看>>
MFC读写文件
查看>>
linux优化
查看>>
手动制作mini linux详细步骤—之一
查看>>
kali密码离线破解
查看>>
Bootstrap优秀模板-Unify.2.6.2
查看>>
poj 3122 Pie (二分)
查看>>
在面试中如何展示虚拟机和内存调优技能
查看>>
C++命名空间学习笔记
查看>>
购物商城Web开发第五天
查看>>
剑指Offer第36题—Java版
查看>>
txt 简单操作
查看>>
jquery $(document).ready() 与window.onload的区别
查看>>
解决Android中,禁止ScrollView内的控件改变之后自动滚动
查看>>
Windows Phone 使用FlurrySdk
查看>>
如何使用git上传代码
查看>>
动态删除下拉框内容
查看>>
Lifestyle
查看>>
spring+shiro共享session完整小例子
查看>>