最短路算法之Dijkstra算法
来源:互联网 发布:淘宝售后客服热线 编辑:程序博客网 时间:2024/05/17 02:21
目标算法:Dijkstra算法
应用范围:最短路
算法代码:
#include<cstdio>#include<iostream>using namespace std;const int maxn = 205;const int Inf = 0x3f3f3f;int map[maxn][maxn];int dis[maxn];int vis[maxn];int n,m;int x,y,z;void mapinit(){ for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(i == j) map[i][j] = 0; //自己到自己的距离为0 else map[i][j] = Inf; //初始化为一个足够大的数来判断最后是否能到达 } }} //初始化邻接矩阵void Arrayinit(int start){ for(int i=0;i<n;i++) { dis[i] = map[start][i]; vis[i] = 0; }}// 初始化访问数组和dis数组int Dijkstra(int start,int end){ Arrayinit(start); vis[start] = 1; for(int i=0;i<n;i++) { int Min = Inf; int flag; for(int j=0;j<n;j++) { if(dis[j] < Min && !vis[j]) { flag = j; Min = dis[j]; } } vis[flag] = 1; for(int j=0;j<n;j++) { if(map[flag][j]+dis[flag] < dis[j] && !vis[j]) dis[j] = map[flag][j] + dis[flag]; } } if(dis[end] == Inf) // 如果终点距离为Inf,则说明无法到达终点,返回-1 return -1; else return dis[end];} // 迪杰斯特拉算法int main(){ while(~scanf("%d%d",&n,&m)) { mapinit(); int start,end; for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); if(map[x][y] > z) map[x][y] = map[y][x] = z; //两个节点之间可能存在多条边,选择其中最小的进行储存 } scanf("%d%d",&start,&end); int ans = Dijkstra(start,end); printf("%d\n",ans); } return 0;}
0 0
- 最短路算法之Dijkstra
- 最短路之dijkstra 算法
- 最短路之Dijkstra算法
- 最短路算法之dijkstra
- 最短路之Dijkstra算法
- 最短路算法之 Dijkstra算法
- 最短路算法之Dijkstra算法
- 最短路算法之dijkstra算法
- 最短路 Dijkstra算法
- 最短路算法Dijkstra
- Dijkstra最短路算法
- 最短路,dijkstra算法。
- 最短路-Dijkstra算法
- 最短路 Dijkstra算法
- 最短路 Dijkstra算法
- Dijkstra最短路算法
- 最短路-Dijkstra算法
- Dijkstra最短路算法
- hdoj-2717-Catch That Cow
- K-th Number【POJ2104】——主席树
- Activiti 由bpmn文件到BpmnModel实体类转换
- 学习android笔记(3):自定义动画
- 统一架构模型(UAM)
- 最短路算法之Dijkstra算法
- ubuntu下配置NFS
- swift开发多线程篇 - NSThread 线程相关简单说明(一些使用和注意点)
- C++作业五
- Android Q&A | setOnItemClickListener(AdapterView.OnItemClickListener) in the type AdapterView....
- 【LeetCode-334】Increasing Triplet Subsequence
- HDU1754 线段树 + 裸 + 单点更新求区间最值
- Hbuilder适配问题
- linux下查看文件夹及其排序的bash语法