Dijkstra算法,单源最短路径(一个起点到各个点的最短距离)
来源:互联网 发布:surge mac 下载 编辑:程序博客网 时间:2024/04/30 22:08
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#include <string.h> //hdu2544#include <queue> //Dijkstra算法,单源最短路径(一个起点到各个点的最短距离) #define inf 9999999using namespace std;int n, map[110][110], dis[110], vis[110];void Dijkstra(int x){int t, j, min, k;memset(vis, 0 ,sizeof(vis)); //vis[t]=0表示还没有求出最短距离 for(t=1; t<=n; ++t) { dis[t]=map[x][t]; //dis[t]指的是从原点到t所要的距离 } vis[x]=1; //原点先标记已求出 for(j=1; j<=n; ++j) //求n个点距离x的最短距离的循环次数(因为有n个点) { min=inf; //注意每次都要重新赋值 for(t=1; t<=n; ++t) { if(!vis[t]&&dis[t]<min) { k=t; //k记录(未求出的)最小距离的节点 min=dis[t]; } } vis[k]=1; for(t=1; t<=n; ++t) //更新剩余的节点 { if(!vis[t]&&dis[k]+map[k][t]<dis[t]) //dis[k](k这个节点已经求出)已是最小 dis[t]=dis[k]+map[k][t]; } } return ;}int main(){int t, m, j, a, b, c;while(scanf("%d%d", &n, &m)!=EOF){if(n==0&&m==0)break;for(j=1; j<=n; ++j){for(t=1; t<=n; ++t)map[j][t]=inf; //初始化,j到t的距离}while(m--){scanf("%d%d%d", &a, &b, &c);map[a][b]=map[b][a]=c; //无向图}Dijkstra(1); //起始点printf("%d\n", dis[n]);}return 0;}
另一道类似hdu1874
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#include <string.h>#include <queue> //Dijkstra算法,单源最短路径(一个起点到各个点的最短距离) #define inf 1000000000using namespace std;int n, map[210][210], dis[210], vis[210];void Dijkstra(int x, int g){int t, j, min, k;memset(vis, 0 ,sizeof(vis)); //vis[t]=0表示还没有求出最短距离 for(t=0; t<n; ++t) { dis[t]=map[x][t]; //dis[t]指的是从原点到t所要的距离 } vis[x]=1; //原点先标记已求出 for(j=0; j<n; ++j) //求n个点距离x的最短距离的循环次数(因为有n个点) { min=inf; //注意每次都要重新赋值 for(t=0; t<n; ++t) { if(!vis[t]&&dis[t]<min) { k=t; //k记录(未求出的)最小距离的节点 min=dis[t]; } } vis[k]=1; if(k==g)return ; for(t=0; t<n; ++t) //更新剩余的节点 { if(!vis[t]&&dis[k]+map[k][t]<dis[t]) //dis[k](k这个节点已经求出)已是最小 dis[t]=dis[k]+map[k][t]; } } return ;}int main(){int t, m, j, a, b, c, start, end;while(scanf("%d%d", &n, &m)!=EOF){for(j=0; j<n; ++j){for(t=0; t<n; ++t)map[j][t]=inf; //初始化,j到t的距离}while(m--){scanf("%d%d%d", &a, &b, &c);if(a<b) //处理重边的情况{map[a][b]=min(map[a][b], c);map[b][a]=map[a][b];}else {map[b][a]=min(map[b][a], c);map[a][b]=map[b][a];}}scanf("%d%d", &start, &end);if(start==end){printf("0\n");continue;}Dijkstra(start, end); //起始点if(dis[end]!=inf)printf("%d\n", dis[end]);else printf("-1\n");}return 0;}
- Dijkstra算法,单源最短路径(一个起点到各个点的最短距离)
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- 点到线段最短距离的算法
- 点到线段的最短距离算法
- 点到线段的最短距离算法
- 点到线段的最短距离算法
- 这是一个用优先队列实现的最短路径dijkstra算法(已经实现两点间最短距离),怎样才能也显示路径上经过的点呢
- Dijkstra算法实现从一个源点到其他各点的最短路径
- 点到折线最短距离所在点距离折线起点的累积距离
- Dijkstra算法(最短距离)
- 第十三周 从一个顶点到其余各顶点的最短路径(Dijkstra算法)
- Dijkstra算法(一个节点到其他所有节点的最短路径)
- Dijkstra算法求任意点到其它点的最短路径
- Dijkstra算法求最短距离
- 最短距离 dijkstra floyd 算法
- Dijkstra算法求最短距离并输出路径(Java实现)
- Dijkstra算法--一个点到其余点最短路径
- 点到平面(三角形)的最短距离
- FZU - 2109 Mountain Number
- Linux input子系统分析 输入子系统核心分析
- 复杂的抽象类
- 【Leetcode】Letter Combinations of a Phone Number
- stl queue
- Dijkstra算法,单源最短路径(一个起点到各个点的最短距离)
- oracle中动态、静态注册
- Java_io体系之BufferedInputStream、BufferedOutputStream简介、走进源码及示例——10
- 策略模式-鸭子的变化
- hdoj1181(变形课,广搜)
- 《数据结构和Java集合框架第三版》读书笔记(九)平衡二叉搜索树的旋转
- android textview换行问题
- poj 1979
- 慎用多继承