constint MAXN = 100005; //sex[i]:编号为i的人的性别,vis[i]:编号为i的人是否已经标记,flag:判断两人是否可行 int sex[MAXN], vis[MAXN], flag; structnode { //fa:父亲id,ma:母亲id,初始化为-1 int fa = -1, ma = -1; }stru[MAXN];
voiddfs(int n, int num) { //超过五代,或者父母不可考 if(num > 4 || n == -1) return; //如果已经被标记过,说明有在五代内有共同亲属,则不能结婚 if(vis[n]) { flag = 1; return; } vis[n] = 1; //进行dfs查找五代内的信息 dfs(stru[n].fa, num+1); dfs(stru[n].ma, num+1); }