Problem: 八中上厕所

Problem: 八中上厕所

Problem: 八中上厕所

Time Limit: 1 Sec  Memory Limit: 128 MB

Description

八中一共有n个建筑物,m条路,每条路长度都为1。
某天,小z正在八中参观。很不幸,小z前一天喝了很多水。然而每当他想上厕所时,他所在大楼的厕所
总是挤满了人,所以他必须到另一栋楼去上厕所。
请你帮小z计算出他到目的地的距离。

Input

第一行n,m,表示n个建筑物,m条路
接下来m行,每行两个数a,b,表示a,b之间有条路
在下来一个数p,表示尿急的次数
接下来p行,每行两个数a,b,a表示小z所在的大楼,b为小z的目的地
n<=100,p<=5000

Output

对于每个询问,输出一个数c,表示a,b之间最短路的长度

Sample Input1

5 6
1 2
1 3
2 3
2 4
3 5
4 5
3
2 5
5 1
2 4

Sample Output1

2
2
1

Sample Input2

10 18
1 2
1 3
1 5
1 8
2 4
2 6
2 7
2 8
2 10
3 8
3 9
4 5
4 6
5 8
6 7
6 9
7 10
8 10
10
2 5
5 2
2 3
1 3
6 4
6 8
7 5
3 9
2 9
7 8

Sample Output2

2
2
2
1
1
2
3
1
2
2

HINT

floyd入门

#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
int n,m,a,b,p,w[101][101];
int main() {
	scanf("%d %d",&n,&m);
	memset(w,0x3f,sizeof(w));
	for(int i=1; i<=m; i++)
		scanf("%d %d",&a,&b),
		w[a][b]=w[b][a]=1;
	for(int d=1; d<=n; d++)
		for(int i=1; i<=n; i++)
			for(int j=1; j<=n; j++)
				if(w[i][d]!=INF&&w[d][j]!=INF&&w[i][d]+w[d][j]<w[i][j])
					w[i][j]=w[i][d]+w[d][j];
	scanf("%d",&p);
	for(int i=0; i<p; i++) {
		scanf("%d %d",&a,&b);
		printf("%d
",w[a][b]);
	}
}
原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740392.html