最短路解题思路
来源:互联网 发布:博客关注平台源码 编辑:程序博客网 时间:2024/06/07 13:42
最短路径:用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:
1.确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。
2.确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
3.确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。
4.全局最短路径问题 - 求图中所有的最短路径。
例题:
/*
n个点,m条边,求1 - n 的距离
输入x y z,表示x到y的距离为z
不存在输出-1
*/
7 10
1 3 3
1 4 1
3 4 1
2 3 5
3 5 5
4 5 2
3 6 2
5 6 1
5 7 7
6 7 4
代码实现:
#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:初始化为-11:初始化为一个奇怪的值其他:其他 */ 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;elselength[x][y] = length[y][x] = min(z,length[x][y]);}dijkstra();printf ("%d\n",dis[n] == INF ? -1 : dis[n]);return 0;}
阅读全文
0 0
- 最短路解题思路
- HDU 图论之最短路部分解题思路
- 【最短路】解题报告
- leetCode 64.Minimum Path Sum (最短路) 解题思路和方法
- HDU 3760(最短路思路)
- 9-27 (最短路,两端思路)
- 最短路入门练习 解题报告
- HDU2544 最短路 解题报告--Dijkstra
- 解题报告 之 HDU2544 最短路
- hdu2544 最短路(floyd) 解题报告
- hdu2544 最短路(Dijkstra) 解题报告
- 最短路的解题方法区别
- 最短路spfaPOJInvitation Cardsj解题报告
- hdu 2544 最短路 spfa 解题报告
- hdu 2544 最短路 Bellman_Ford 解题报告
- Hdu 3986 【枚举】【最短路】 解题报告
- BZOJ 1003 DP+最短路 解题报告
- POJ1724 ROADS 解题报告【最短路/SPFA】
- 常见内存错误
- 初识nodejs4
- Linux PAM 开发
- MySQL常用语句
- 51nod1108(距离之和最小V2)
- 最短路解题思路
- Linux-3
- Java面向对象
- element ui框架 弹出框内容重置功能
- J2ME程序开发九大要点(下篇)
- Vim编辑器
- Qt的编程风格与规范
- hdu 6058 Kanade's sum
- Spring MVC 中文乱码(详细实用)