Codevs 1077 多源最短路 Floyd
来源:互联网 发布:可汗学院 黑板软件 编辑:程序博客网 时间:2024/05/16 18:23
- 简介
- 例题
- 代码
简介
最短路问题是图上的常见问题。
什么是多源最短路?就是在询问的时候起点可能不止一个的最短路问题。
例题
题目描述 Description
已知n个点(n<=100),给你n*n的方阵,a[i,j]表示从第i个点到第j个点的直接距离。
现在有Q个询问,每个询问两个正整数,a和b,让你求a到b之间的最短路程。
满足a[i,j]=a[j,i];
输入描述 Input Description
第一行一个正整数n,接下来n行每行n个正整数,满足a[i,i]=0,再一行一个Q,接下来Q行,每行两个正整数a和b。
输出描述 Output Description
一共Q行,每行一个整数。
样例输入 Sample Input
3
0 1 1
1 0 3
1 3 0
1
2 3
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
n<=100,Q可能非常大。g[i][j]均>=0
请使用flyod算法
使用C/C++的同学请注意:由于输入数据较大,使用cin和cout会导致程序超时。请使用scanf与printf进行输入和输出。
典型的多源最短路问题,由于n不大(n<=100),所以我们可以Floyd,时间复杂度
Floyd是基于DP思想的一个算法,会DP的同学可以一眼切。
代码
#include<cstdio>#include<iostream>#include<algorithm>#define sc scanf#define pr printfusing namespace std;const int maxn=105;int dp[maxn][maxn];int readint(){ int num; char ch; while((ch=getchar())<'0'||ch>'9'); num=ch-'0'; while((ch=getchar())>='0'&&ch<='9') num=num*10+ch-'0'; return num;}void outint(int x){ if(x>=10) outint(x/10); putchar(x%10+'0'); return;}int main(){ int n,q,k,m=0; n=readint(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=readint(); for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); q=readint(); for(int i=1;i<=q;i++) { int a,b; a=readint(); b=readint(); outint(dp[a][b]); puts(""); } return 0;}
大体思路就是:
我们遍历一遍所有的点,从这些点中选出三个点a,b,c。
如果a通过c走到b比a直接走到b的路径短,则更新最短路。
阅读全文
0 0
- Codevs 1077 多源最短路 Floyd
- CODEVS 1077多源最短路
- 【codevs 1077】多源最短路
- CODEVS 1077 多源最短路
- Codevs 1077 多源最短路
- 【codevs 1077】多源最短路
- 【codevs 1077】多源最短路
- FLOYD 多源最短路
- 多源最短路:floyd
- 多源最短路->Floyd算法
- codevs1077 多源最短路 Floyd
- Floyd多源最短路算法
- 多源最短路(floyd)
- 多源最短路(Floyd算法)
- codevs 2800 送外卖 (状压dp+Floyd求最短路)
- codevs - 图论 - Floyd
- 多源最短路·floyd && 最小环算法
- uva627The Net 多源最短路bfs,floyd都行
- C++ 标准库 string类型(三)
- 39. Combination Sum &&40. Combination Sum II
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 F. Islands
- 孩子出生,护士突然一阵尖叫,全家人崩溃了
- Java基础——Servlet(八)文件上传下载
- Codevs 1077 多源最短路 Floyd
- 测试
- python
- 复习Java基础之对象转型
- SimpleUrlHandlerMapping使用
- redis jedis
- linux命令 --vim
- iOS方向盘代码
- [LeetCode]55. Jump Game