问题
计算辈分
我们国家有个独特的文化,就是把家族或亲戚之间的关系用辈分的单位来表示。这样的辈分会按照如下方式计算。
基本上把父母和子女之间定义为1辈,这样计算人之间的辈分。比如说,我和爸爸,爸爸和爷爷都是1辈,我和爷爷成为2辈,爸爸兄弟和爷爷是1辈,我和爸爸兄弟成为3辈。
当给出多个人的父母子女之间的关系时,请编写能计算提供的两个人辈分的程序。
输入
第一行给出所有人数 N。每个人的号码各个表示为1, 2, ..., N。(1 ≤ N ≤ 100)
第二行给出需要计算辈分的两名不是同一个人的号码A, B。(1 ≤ A, B ≤N)
第三行,给出父母子女之间的关系个数M。
从第四行,通过M行空格划分给出表示父母子女之间关系的两个号码x, y。这时表示的是x是y的父母。(1 ≤ x, y ≤ N)
输出
第一行输出A, B之间的辈分。有时候,因为两个人没有任何亲戚关系,所以无法计算辈分,这时请输出-1。
案例输入
9
7 3
7
1 2
1 3
2 7
2 8
2 9
4 5
4 6
案例输出
3
#include<stdio.h>
intway[111][111], vis[111];
int n, m,x, y;
int ans =-1;
voiddfs(int node, int d = 0) {
if (vis[node]) return;
if (node == y) { ans = d; return; }
vis [node] = 1;
for (int i=1;i<=n;i++) {
if (!way[node][i] || vis[i]) continue;
dfs (i, d+1);
}
}
int main(){
scanf("%d%d%d%d",&n,&x,&y,&m);
for (int i=1;i<=m;i++) {
int a,b;
scanf ("%d%d",&a,&b);
way[a][b] = way[b][a] = 1;
}
dfs(x);
printf ("%d",ans);
return 0;
}