djkstra 我的dijkstra模板
来源:互联网 发布:三星s4支持3g网络吗 编辑:程序博客网 时间:2024/05/23 02:10
//根据大神模板修改加注释的我的小菜鸟模板,如有错误欢迎指正!#include <iostream>#include<stdio.h>#include<string.h>using namespace std;const int N=1005;const int MAX=0x3f3f3f3f;int mapa[N][N]; //邻接矩阵存图的结构int flag[N],dis[N]; //flag 标记数组,标记点是否已访问 //dis记录固定起点(一般以1为例)到各点的距离int dijkstra(int n,int m){ for(int i=1;i<=n;i++) dis[i]=mapa[1][i]; //记录与1直接相连的点距离1的最短距离 flag[1]=1; //1点已访问 dis[1]=0; //点1到自身的距离为0 int k=0; //k初始化为0,避免题目中出现无法到达时,flag[k]=1无法赋值而出现segmentation core dump for(int i=1;i<=n;i++){ int min=MAX; //min 记录最小值 for(int j=1;j<=n;j++) if(flag[j]==0&&min>dis[j]){ //找未访问过的点中距离已访问点的最小值及点k min=dis[j]; k=j; } //或者 if(k) flag[k]=1; //flag[k]=1 在答案为no时,k不改变,保留原值,所以一开始初始化k=0 //k!=0:标记k为已访问 for(int j=1;j<=n;j++) if(flag[j]==0&&dis[j]>dis[k]+mapa[k][j]) //引入k点,将dis中与k连通后距离变小的更新 dis[j]=dis[k]+mapa[k][j]; } return dis[n]; //返回想到达的点的最短距离值}int main(){ int n,m; while(~scanf("%d%d",&n,&m)) //n个点 m条路 { for(int i=0;i<=N-1;i++){ dis[i]=MAX; //dis初始化为MAX,表示无穷远,无法连通 flag[i]=0; //标记数组flag初始化为0 for(int j=0;j<=N-1;j++) { mapa[i][j]=MAX; //邻接矩阵初始化为无穷远 } } int x,y,z; for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); if(z<mapa[x][y]) //防止重边 mapa[x][y]=z; //有向图 //无向图 mapa[x][y]=mapa[y][x]=z; } int count=dijkstra(n,m); if(count==MAX) printf("No\n"); else printf("%d\n",count); } return 0;}
阅读全文
0 0
- djkstra 我的dijkstra模板
- Djkstra
- 朴素的dijkstra模板
- dijkstra的算法模板
- HDU 2544 最短路(我的dijkstra算法模板、SPAFA算法模板)
- poj 1062 昂贵的婚礼 djkstra
- 模板 Djkstra+链式前向星+堆优化
- 变色的DNA-Dijkstra模板
- dijkstra 模板
- dijkstra 模板
- Dijkstra模板
- dijkstra模板
- dijkstra模板
- Dijkstra模板
- (Dijkstra模板)
- Dijkstra模板
- Dijkstra模板
- Dijkstra 模板
- VMware虚拟机上配置nginx后,本机无法访问问题
- 关于静态全局变量的一些想法
- Python爬虫(四)——模拟登录imooc实战(利用cookie)
- SpringMVC基础-3-参数绑定
- 自定义View实现进度圆环
- djkstra 我的dijkstra模板
- tomcat版本不支持web项目
- Android+Genymotion开发环境搭建
- css页面布局 week3学习
- RxJava基础操作
- 51nod 1202 子序列个数 (DP) 图解
- android studio 自定义view 带进度条的的圆 画弧 初学者最适合
- 【loli的胡策】联校11.5(lca)
- 定义与声明的区别