最短路--dijkstra
来源:互联网 发布:java http请求获取mac 编辑:程序博客网 时间:2024/06/07 11:11
n个点,m条边,求1 - n 的距离输入x y z,表示x到y的距离为z 输出1 - n的最短距离 不存在输出-1
//如果多次循环记得清空vector#include<cstdio>#include<queue>#include<vector>#include<algorithm>#include<cstring>using namespace std;#define INF 0x3f3f3f3fint dis[105];int len[105][105];int vis[105];int n,m;vector<int>edge[105];struct Pair{ int fi,se; //fi 表示点,se表示距离 bool friend operator<(Pair a,Pair b) { return a.se>b.se; } }pr,ne; void dijkstra(){ memset(dis,INF,sizeof(dis));//初始化数组为无穷大 memset(vis,0,sizeof(vis));//初始化数组为0 pr.fi=1; pr.se=0; priority_queue<Pair>q; q.push(pr); while(!q.empty()) { pr=q.top(); q.pop(); if(vis[pr.fi]) //判断点是否被标记 continue; vis[pr.fi]=1; //标记点 for(int i=0;i<edge[pr.fi].size();i++) { ne.fi=edge[pr.fi][i]; // edge[pr.fi][i]表示与pr.fi相连的第i+1个点 ne.se=pr.se+len[pr.fi][ne.fi]; if(ne.se<dis[ne.fi]) //判断是否是最短路径 { dis[ne.fi]=ne.se; q.push(ne); } } } }int main(){ scanf("%d%d",&n,&m); memset(len,-1,sizeof(len)); for(int i=0;i<m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); edge[x].push_back(y); //储存边 edge[y].push_back(x); //无向图双向储存 if(len[x][y]==-1) //判断两个点之间是不是只有一条路 len[y][x]=len[x][y]=z; else len[y][x]=len[x][y]=min(z,len[x][y]);//如果有多条路储存长度较小的路 } dijkstra(); printf("%d",dis[n]==INF?-1:dis[n]);}
阅读全文
0 0
- 最短路 Dijkstra算法
- 最短路之dijkstra
- hdu1874 Dijkstra 最短路
- HUD最短路 (Dijkstra)
- hdu2544 Dijkstra最短路
- 最短路之Dijkstra
- 图论 最短路 Dijkstra
- Dijkstra 求最短路
- dijkstra最短路 hdu2066
- Dijkstra 求最短路
- 最短路dijkstra--poj2502
- HDU2544:最短路(Dijkstra)
- 最短路 dijkstra模板
- 最短路(dijkstra)
- 最短路算法Dijkstra
- Dijkstra最短路算法
- 最短路-dijkstra
- 最短路(dijkstra)
- 51nod 1414 冰雕
- 解决各种view转image的时候图片变模糊的问题
- Linux系统资源获取并写入数据库
- 剑指offer-02:设计一个单例模式的类
- CASIA步态能量图像数据库
- 最短路--dijkstra
- Bad Cowtractors
- 映射参数
- RMQ
- Java并发编程实战(学习笔记四 第五章 基础构建模块 下)
- mantisbt的安装,亲自试验,绝对可用
- 51nod 1534 棋子游戏 ACM
- 简单的动态日期
- Hadoop