用邻接map 和队列实现的单源 Dijkstra最短路
来源:互联网 发布:手机兼职淘宝客服 编辑:程序博客网 时间:2024/05/18 03:26
/*************************************************************************> File Name: Dijkstra.cpp> Author:keson> Mail:keson@bupt.edu.cn> Created Time: 2014年12月07日 星期日 17时09分20秒 ************************************************************************/#include<iostream>#include<vector>#include<map>#include<algorithm>#include<queue>#include<fstream>using namespace std;const int INIT_MAX=100;struct Node{ multimap<int,Node*> adjMap; //可能一个节点到另外节点的距离是相同的值 // bool known=false; int dist=INIT_MAX; //定义不能到达的距离 Node* path;};//计算从节点s为起始点,到其他点的最小距离void dijkstra(Node *s){ s->dist=0;// s->known=true; queue<Node*>q; q.push(s); while(!q.empty()) { Node *v=q.front(); for(auto &w:v->adjMap) //查询邻接,map的first是邻接点的距离,second是指向邻接点的指针 if(v->dist+w.first<w.second->dist) { w.second->dist=v->dist+w.first; w.second->path=v; q.push(w.second); } q.pop();}}void inputMat(vector<vector<int>> &T,int row,int col){ ifstream in; in.open("infile"); //打开邻接矩阵的文件 int i,j; vector<int> vec2(col); int val; cin.clear(); cout<<"Enter the adj:"<<endl; for(i=0;i<row;++i) { vec2.clear(); for(j=0;j<col;++j) { in>>val; vec2.push_back(val); } T.push_back(vec2); }}void adjNode(Node &v1,Node *v2,int distance){ v1.adjMap.insert(make_pair(distance,v2));}//根据邻接矩阵创建邻接表void createAdjMap(vector<Node> &vec,vector<vector<int>> &T){ for(int i=0;i<T.size();i++) { for(int j=0;j<T[0].size();j++) if(T[i][j]<100&&T[i][j]>0) adjNode(vec[i],&vec[j],T[i][j]); }}//v1到v2的最短距离void shortest(Node &v1,Node &v2){ dijkstra(&v1); cout<<v2.dist<<endl;}int main(){ cout<<"Enter the number of the Vertex: "<<endl; int N; cin>>N; vector<Node> vec(N); vector<vector<int>> mat; inputMat(mat,N,N); createAdjMap(vec,mat); shortest(vec[0],vec[1]); //第一个节点到第二个节点的最短璐 dijkstra(&vec[0]); for(auto &w:vec) cout<<w.dist<<endl;}
0 0
- 用邻接map 和队列实现的单源 Dijkstra最短路
- ACM:最短路,dijkstra,邻接表的建立,使用邻接表跟优先队列的dijkstra,Bellman-Ford,Floyd。。
- HDU 2544 最短路 静态邻接表+优先队列 dijkstra
- hdu 2544 最短路(Dijkstra 邻接表+优先队列)
- 基于邻接表和优先级队列的Dijkstra算法实现
- 优先队列Dijkstra实现最短路算法
- 最短路模板——dijkstra,SPFA(邻接表实现)
- hdoj 2544 最短路 【dijkstra + floyd + spfa邻接表实现】
- HDU 2544 最短路 单源Dijkstra
- 最短路模板(dijkstra+邻接表)
- poj 1847 最短路 dijkstra模板(vector邻接表+队列优化)
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- 邻接表实现最短路
- 算法训练 最短路 dijkstra优先队列和spfa
- 单源最短路(Dijkstra)邻接表实现
- Floyd和Dijkstra的最短路
- 最短路-邻接表(优先队列)写
- [最短路]使用优先队列优化的Dijkstra算法
- 【leetcode 分治法】Find Peak Element
- HDU4970 Killing Monsters 【数组标记】
- 背包九讲 算法摘记
- UVA11636 - Hello World!
- php 代码优化建议
- 用邻接map 和队列实现的单源 Dijkstra最短路
- 文档处理 内部插入
- EdX平台汉化
- Python 实现mysql数据库
- 写在工作五周年纪念日
- 32位ubuntu14下编译openjdk7
- htmlParse和Jsoup
- 【Java.NIO】API —— Channel接口 —— DatagramChannel类
- 由基于qml,c++的串口调试工具浅谈qml与c++混合编程