dijkstra(最短路径)
来源:互联网 发布:苏州德威国际学校 知乎 编辑:程序博客网 时间:2024/05/16 09:27
//不带堆优化版本,1为源点
int dijkstra(){ int ans = 0; for(int i = 1; i <= n; i++) vis[i] = 0,dis[i] = inf; dis[1] = 0; for(int i = 1; i <= n; i++) { int temp = inf,u; for(int j = 1; j <= n; j++) //每次找离源点最近的点(未被访问过) { if(vis[j]) continue; if(temp > dis[j]) temp = dis[j],u = j; } vis[u] = 1; for(int j = 0; j < g[u].size(); j++)//松弛它能松弛的 { int v = g[u][j].to; if(vis[v]) continue; if(dis[v] > dis[u] + g[u][j].w) //松弛操作 dis[v] = dis[u] + g[u][j].w; } } printf("%d\n",dis[n]); return 0;}
//带堆优化版本 0为源点
#define inf = 0x3f3f3f3f;struct node{ int to,w; node(){} node(int a,int c){to = a; w = c ;} bool operator < (const node temp)const {return w > temp.w;}};int vis[maxn], dis[maxn];vector <node> g[maxn];int dijkstra(){ priority_queue<node> pq; pq.push(node(0,0)); for(int i = 0; i < n ; i++) vis[i] = 0,dis[i] = inf; dis[0] = 0; while(!pq.empty()) { node temp = pq.top(); pq.pop();//堆顶元素是离源点最近的那一个 int u = temp.to; if(vis[u]) continue; vis[u]=1; for(int i = 0; i < g[u].size(); i++)//松弛找到的这个点能松弛的所有距离 { int v = g[u][i].to,w = g[u][i].w; if(dis[v] > dis[u] + w) //松弛操作 { dis[v] = dis[u] + w; pq.push(node(dis[v],v)); } } }}
阅读全文
1 0
- 最短路径(Dijkstra)
- 最短路径(Dijkstra)
- dijkstra(最短路径)
- hdu3709(最短路径路径dijkstra)
- 最短路径 Dijkstra
- 最短路径-Dijkstra
- Dijkstra 最短路径
- Dijkstra 最短路径。
- 最短路径dijkstra
- 最短路径 Dijkstra
- Dijkstra最短路径
- Dijkstra 最短路径
- 最短路径 dijkstra
- dijkstra最短路径
- Dijkstra最短路径
- 最短路径-Dijkstra
- 最短路径 【Dijkstra】
- 最短路径dijkstra
- 关于提交页面刷新问题
- SD工具类
- 第2章-创建和销毁对象
- HDU-3591-The trouble of Xiaoqiant
- Android学习之GridLayout
- dijkstra(最短路径)
- Java中的HashMap深入详解
- Dreamweaver 怎么网页布局 div css布局
- A
- Linux 集成环境mvn test 单元测试报错java.lang.OutOfMemoryError: PermGen space
- 整数划分问题(动态规划||母函数)HIT 1402
- Python学习
- 8月20号 XML写入
- VS Code 快捷键(中英文对照)