Dijkstra算法(单源最短路径,单源分别是终点和起点)
2015-05-31 09:54
411 查看
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <string.h> #include <queue> //Dijkstra算法(单源最短路径,这道题中单源分别是奶牛返回时统一的起点(Dijkstra1函数),奶牛统一到达的终点(Dijkstra2函数) #define N 1010 //poj3268 #define inf 100000000 using namespace std; int n, vis , map , dis1 , dis2 ; void Dijkstra1(int x)//正向使用Dijkstra算法,单源是奶牛返回时统一的起点 { int t, j, k, min; memset(vis, 0, sizeof(vis)); for(t=1; t<=n; ++t) dis2[t]=map[x][t];//dis2[t]表示从x到t的距离 vis[x]=1; for(j=1; j<=n; ++j) { min=inf; for(t=1; t<=n; ++t) { if(!vis[t]&&dis2[t]<min) { k=t; min=dis2[t]; } } vis[k]=1; for(t=1; t<=n; ++t) { if(!vis[t]&&dis2[k]+map[k][t]<dis2[t]) dis2[t]=dis2[k]+map[k][t]; } } return ; } void Dijkstra2(int x) //奶牛统一到达的终点,单源是终点(x),逆向使用Dijkstra算法 { int t, j, k, min; memset(vis, 0, sizeof(vis)); for(t=1; t<=n; ++t) dis1[t]=map[t][x];//dis1[t]表示从t到x的距离 vis[x]=1; for(j=1; j<=n; ++j) { min=inf; for(t=1; t<=n; ++t) { if(!vis[t]&&dis1[t]<min) { k=t; min=dis1[t]; } } vis[k]=1; for(t=1; t<=n; ++t) { if(!vis[t]&&dis1[k]+map[t][k]<dis1[t]) //注意,这里是dis1[k]+map[t][k],指的是t到x的距离,更新 dis1[t]=dis1[k]+map[t][k]; } } return ; } int main() { int m, t, j, a, b, c, X, maxn; while(scanf("%d%d%d", &n, &m, &X)!=EOF) { for(j=1; j<=n; ++j) { for(t=1; t<=n; ++t) { map[j][t]=inf; } } while(m--) { scanf("%d%d%d", &a, &b, &c); map[a][b]=c; } Dijkstra1(X); Dijkstra2(X); for(t=1, maxn=-1; t<=n; ++t) { if(t==X)continue; if(dis1[t]+dis2[t]>maxn) maxn=dis1[t]+dis2[t]; } printf("%d\n",maxn); } return 0; }
相关文章推荐
- 通过Response输出方式导出Excel
- Combination Sum II
- Fedora10 配置使用root用户登录
- mybatis连接mysql数据库实现的jdbc功能
- Floyd算法,求图中两个点之间的最短距离
- 利用ListView实现新闻客户端的新闻内容图文混排
- TL 栈,队列,优先队列用法
- KBMMW 4.82.00 发布
- java个人学习笔记:位运算符
- 最小顶点数就能覆盖所有边==二分图的最大匹配
- 给老师的建议?????
- NOI2005 维修数列(综合包括求区间的最大值)---Splay
- PostgreSQL function里面调用function
- hdu3487 (splay伸展树 区间翻转,切割,插入)
- Combination Sum
- Android TextView里直接显示图片的三种方法
- HTML 表单(form) 使用详解
- Redhat6.2升级为Redhat6.3 (linux内核升级)
- 回调函数理解-以Fragment为例
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)