Floyd算法解决最短路径问题
2015-09-18 13:58
405 查看
本文给出了用Floyd算法来求最短路径问题的程序。
输入如下所示:
1 —————–测试用例个数
10 —————–本测试用例的点数
1 2 4 ——————第一个点和第二个点之间的距离是4.
1 3 8
2 3 3
2 4 4
2 5 6
3 4 2
3 5 2
4 5 4
4 6 9
5 6 4
代码如下:
输入如下所示:
1 —————–测试用例个数
10 —————–本测试用例的点数
1 2 4 ——————第一个点和第二个点之间的距离是4.
1 3 8
2 3 3
2 4 4
2 5 6
3 4 2
3 5 2
4 5 4
4 6 9
5 6 4
代码如下:
#include <stdio.h> #define MAX 6 #define MAX_VALUE 65536 int v[MAX + 1][MAX + 1] = { 0 }; int p[MAX + 1][MAX + 1] = { 0 }; void Floyd() { v[1][1] = 0; for (int k = 1; k <= MAX; k++) for (int i = 1; i <= MAX; i++) for (int j = 1; j <= MAX; j++) if (v[i][k] + v[k][j]<v[i][j]) { v[i][j] = v[i][k] + v[k][j]; p[i][j] = k; } } void initV(void) { for (int i = 1; i <= MAX; i++) for (int j = 1; j <= MAX; j++) { v[i][j] = MAX_VALUE; } } void printPathFloyd() { printf("%d\n", v[1][6]); int path[10]; int end = 0; int curValue = 6; while (curValue != 0) { path[end++] = curValue; curValue = p[1][curValue]; } for (int j = end - 1; j >= 0; j--) { printf("%d ", path[j]); } printf("\n"); } int main(int argc, char** argv) { freopen("input.txt", "r", stdin); int N; scanf("%d\n", &N); for (int case_num = 0; case_num < N; case_num++) { initV(); int line_num; scanf("%d\n", &line_num); for (int i = 0; i < line_num; i++) { int pt1, pt2, length; scanf("%d %d %d", &pt1, &pt2, &length); v[pt1][pt2] = length; v[pt2][pt1] = length; } Floyd(); printPathFloyd(); } }
相关文章推荐
- 飞鸽传书源码分析-程序启动过程
- 【Git学习笔记】git log命令使用
- Unity3D Resources TextAsset 正文
- this compilation unit is not on the build path of a java project
- PHP环境部署问题集合
- android:layout_grovity="bottom" 不起作用
- Android Gradle 基本模板
- 全自动遮罩层插件layer2.0版本发布(可传参),兼容IE7以上
- Python3.5 右键没有Edit with IDLE选项
- Linux下安装并使用Java开发opencv的配置
- 通信协议设计
- WordPress 4.3.1正式发布 修复了3个安全问题
- Siege linux压力测评
- 面试题 31
- maven笔记
- WebRTC知识分享——信令服务
- OpenCV for Ios 学习笔记(1)-配置
- 混合IT架构的最佳实践
- z-index无效,无论设置多大都被其他的元素覆盖
- Remove Element