【最短路】基础
来源:互联网 发布:淘宝新手入门教程视频 编辑:程序博客网 时间:2024/05/26 09:53
用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
/* n个点,m条边,求1 - n 的距离 输入x y z,表示x到y的距离为z 不存在输出-1 没有初始化 */#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;#define INF 0x3f3f3f3fstruct Pair{ int first,second; //first存点,second存距离 bool friend operator < (Pair a,Pair b) { return a.second > b.second; }}pr,ne;int n,m;vector<int> edge[105]; //存与之相连的边 int length[105][105]; //存相连边的长度 int dis[105]; //记录到起点的距离 void dijkstra(){ memset(dis,INF,sizeof(dis)); /* 第二个参数可以填 0,-1,1,其他 0:把元素都初始化为0 -1:初始化为-1 1:初始化为一个奇怪的值 其他:其他 */ bool vis[105]; memset(vis,false,sizeof(vis)); dis[1] = 0; pr.first = 1; pr.second = 0; priority_queue<Pair> Q; Q.push(pr); while (!Q.empty()) { pr = Q.top();// printf ("==%d %d==\n",pr.first,pr.second); Q.pop(); if (vis[pr.first]) continue; vis[pr.first] = true; for (int i = 0 ; i < edge[pr.first].size() ; i++) { ne.first = edge[pr.first][i]; ne.second = pr.second + length[pr.first][ne.first]; if (ne.second < dis[ne.first]) { dis[ne.first] = ne.second; Q.push(ne); } } }}int main(){ scanf ("%d%d",&n,&m); memset(length,-1,sizeof(length)); for (int i = 1 ; 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 (length[x][y] == -1) length[x][y] = length[y][x] = z; else length[x][y] = length[y][x] = min(z,length[x][y]); } dijkstra(); printf ("%d\n",dis[n] == INF ? -1 : dis[n]); return 0;}/*测试数据7 101 3 31 4 13 4 12 3 53 5 54 5 23 6 25 6 15 7 76 7 4*/
阅读全文
0 0
- hdu2544 基础最短路
- 基础最短路
- 最短路基础算法
- 【最短路】基础
- 基础最短路算法【渣】
- HDU 2544 最短路基础
- POJ2387(最短路基础)
- HDU-2544-基础最短路
- HDOJ-----2544最短路基础
- poj 1135 基础最短路
- 基础最短路四 POJ3268
- 基础最短路五 POJ1860
- 基础最短路六 POJ3259
- 基础最短路 八 POJ3660
- hdu 2544 基础最短路
- Hud 2544 最短路 [基础最短路dijksra||bellman-ford]
- 最短路专题【基础篇】(updating...)
- HDU 1874 最短路基础入门题
- 23种设计模式
- Tomcat服务器的搭建和配置和结构简介
- Workerman与Thinkphp结合 群组消息转发给客户端
- 图论算法:拓扑排序(Topological Sort)
- docker for mac 安装spark 2.2.0 + hadoop 2.8.0 集群
- 【最短路】基础
- Vue开发环境搭建及热更新
- Eclipse 配置第一个Spring Framework项目 with Maven
- 一天一道leecode 1
- Linux 之 shell 比较运算符
- LinghtOJ1132 Summing up Powers
- brew install rabbitmq
- TCP/IP 三次握手协议与四次放手协议
- Python纪实:用爬虫明确求职路上的技能树(一)