最短路径 -- spfa
来源:互联网 发布:2016年中国m2数据 编辑:程序博客网 时间:2024/06/05 09:32
最短路径 – spfa
Google的第二轮,第一题就是一道图论题目,对于图论薄弱的我,简直是当头一棒!
看题戳这里
此题略复杂,不过看过大牛的解题报告之后,深感自己弱爆了。
大牛的解题报告戳这里
此题还是单源最短路问题,只是分成了24小时的动态路径,而由于题目中的限制条件:
It is guaranteed that
Cost[t] ≤ Cost[t+1]+1 (0 ≤ t ≤ 22) and Cost[23] ≤ Cost[0]+1.
使得我们熟知的最短路算法可以得到正确的解(详细解释参看大牛的报告)
借此机会,学习了一下 spfa 算法
参考资料戳这里
感谢以上引用的各位博主!
附上通过代码(C++)
#include <stdio.h>#include <limits.h>#include <string.h>#include <queue>#define IMAX (INT_MAX/2)#define min(a,b) (((a) < (b)) ? (a) : (b))using namespace std;int T, Ti, N, M, K, D, S, x, y, t, i, j;int cost[501][501][24], dis[501][24], vis[501];//cost 记录输入路径//dis 以0~23小时开始的单源最短路的距离//vis spfa算法的中间变量,记录访问状态//初始化数组void init() { for (i = 0; i <= N; i++) { for (j = 0; j <= N; j++) { for (t = 0; t < 24; t++) { cost[i][j][t] = IMAX; } } } for (i = 0; i <= N; i++) { for (t = 0; t < 24; t++) { cost[i][i][t] = 0; } } memset(dis, 0, sizeof(dis)); for (i = 2; i <= N; i++) { for (t = 0; t < 24; t++) { dis[i][t] = IMAX; } }}int main() { scanf("%d", &T); for (Ti = 1; Ti <= T; Ti++) { scanf("%d %d %d", &N, &M, &K); init(); //处理输入 for (i = 0; i < M; i++) { scanf("%d %d", &x, &y); for (j = 0; j < 24; j++) { scanf("%d", &t); cost[x][y][j] = min(cost[x][y][j], t); cost[y][x][j] = min(cost[y][x][j], t); } } //对24小时的每个小时做一遍 for (t = 0; t < 24; t++) { // spfa算法 queue<int> que; que.push(1); memset(vis, 0, sizeof(vis)); vis[1] = 1; while (!que.empty()) { int pre = que.front(); for (i = 1; i <= N; i++) { if (cost[pre][i][0] == IMAX) continue; int tm = (t + dis[pre][t]) % 24; //计算时间差,适应动态路径的权重 if (dis[i][t] > dis[pre][t] + cost[pre][i][tm]) { dis[i][t] = dis[pre][t] + cost[pre][i][tm]; if (vis[i] == 0) { vis[i] = 1; que.push(i); } } } que.pop(); vis[pre] = 0; } } //O(1)时间查找输出 printf("Case #%d:", Ti); for (i = 0; i < K; i++) { scanf("%d %d", &D, &S); if (dis[D][S] == IMAX) { printf(" -1"); } else { printf(" %d", dis[D][S]); } } printf("\n"); } return 0;}
0 0
- spfa最短路径
- 最短路径spfa
- spfa 最短路径
- 最短路径 -- spfa
- SPFA最短路径
- SPFA--最短路径
- 最短路径算法---SPFA
- 最短路径----SPFA算法
- 最短路径之 SPFA
- 【最短路径】SPFA算法
- SPFA算法【最短路径】
- SPFA最短路径模板
- 最短路径问题/Spfa
- 最短路径SPFA算法
- 【模板】最短路径spfa
- pku 3259(最短路径,spfa)
- POJ_2394_最短路径---SPFA算法
- 最短路径——SPFA
- 网络攻击知识之几种IP地址攻击方式
- python安装第三方库
- JAVA实现AES加密
- 推送消息接收
- Linux I/O Models
- 最短路径 -- spfa
- Find the Duplicate Number leetcode 287
- Mysql存储emoji表情
- lua的编译、运行
- 'tools.jar' seems to be not in Android Studio classpath----Android Studio启动时问题
- 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源码分析
- 32位与64位下各类型长度对比
- [IOSB]StoryBoard简单使用
- 欢迎使用CSDN-markdown编辑器