Problem: 八中上厕所
Problem: 八中上厕所
Time Limit: 1 Sec Memory Limit: 128 MBDescription
八中一共有n个建筑物,m条路,每条路长度都为1。
某天,小z正在八中参观。很不幸,小z前一天喝了很多水。然而每当他想上厕所时,他所在大楼的厕所
总是挤满了人,所以他必须到另一栋楼去上厕所。
请你帮小z计算出他到目的地的距离。
某天,小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
接下来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\n",w[a][b]);
}
}