1003. Emergency (25)(floyd)
来源:互联网 发布:菲律宾跳水队 知乎 编辑:程序博客网 时间:2024/06/06 01:42
学习最短路径吧,这题不太适合用floyd 毕竟 n3 的复杂度 还是很伤的,但是还是把自己用 floyd 写的半残品记下来吧,以备不时之需。
#include <cstdio>#include <vector>int main(){ int N,M,C1,C2; int value[501][501] = {0}; int change[501][501] = {0}; int cityValue[501] = {0}; scanf("%d %d %d %d",&N,&M,&C1,&C2); for (int i = 0; i < N; i++) { int num; scanf("%d",&num); cityValue[i] = num; for (int j = 0 ; j < N; j++) { value[i][j] = 65535; value[i][i] = 0; change[i][j] = j; } } for (int i = 0; i < M; i++) { int c1,c2,tmp; scanf("%d %d %d",&c1,&c2,&tmp); value[c1][c2] = tmp; value[c2][c1] = tmp; } for (int k = 0; k < N; k++) { for (int v = 0; v < N; v++) { for (int w = 0; w < N; w++) { if (value[v][w] > (value[v][k] + value[k][w])) { value[v][w] = value[v][k] + value[k][w]; change[v][w] = change[v][k]; } } } } for (int v = 0; v < N; v++) { for (int w = v + 1; w < N; w++) { printf("v%d-v%d weight: %d",v,w,value[v][w]); int k = change[v][w]; printf("path : %d",v); while(k!=w) { printf("-> %d",k); k = change[k][w]; } printf(" -> %d\n",w); } printf("\n"); } return 0;}
很漂亮很简单的代码。
阅读全文
0 0
- 1003. Emergency (25)(floyd)
- 1003. Emergency (25)(*****)
- SDUT 2155 Emergency(Floyd)
- PAT 1003. Emergency (25)(俩点间最短路径)
- 1003. Emergency (25)(dijikstra+DFS)
- 1003. Emergency (25)
- 1003. Emergency (25)-PAT
- (PAT)1003. Emergency (25)
- 1003. Emergency (25)
- 【C++】1003. Emergency (25)*
- 1003. Emergency (25)
- PAT 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- PAT 1003. Emergency (25)
- 1003. Emergency (25)
- 1003. Emergency (25)
- [PAT]1003. Emergency (25)
- 生日悖论扩展引申1-c++代码实现
- iOS开发网络篇 一一 JSON解析
- Codeforces Round #451 (Div. 2) A-C题解
- Codeforces Round #451 (Div. 2)题解
- Visual Studio的语言服务器协议
- 1003. Emergency (25)(floyd)
- 自动类型安全的REST .NET标准库refit
- 使用Windows兼容包简化向.NET Core的迁移
- hibernate配置文件
- haskell学习笔记(1)
- 页面呈现
- 单例模式浅谈
- 【BZOJ】3007 拯救小云公主 最短路径
- 线程池的原理及实现