这道题一看就知道是水题,但是却做了好久,原因是递归自增没处理好,WA了好多次,没想到直接在递归里直接加1就行=0 =(最后还是想到了)
Here is my code:
#include<stdio.h>
#include<iostream>
using namespace std;
bool findnode(char a[][2],char b[][3],int n,int m,char x,char y,int len,int mode)
{
if(x==y) //当目标和变量相等时,即路径存在时递归结束 ,同时输出
{
if(len>=3)
for(int i = 2;i<len;i++)
printf("great-");
if(mode == 1)
if(len>=2)
printf("grandparent\n");
else
printf("parent\n");
else
if(len>=2)
printf("grandchild\n");
else
printf("child\n");
return true;
}
if(x!=y) //不相等,继续递归
{
for(int i =0;i<n;i++)
{
if(b[i][0] == x) //这一代的孩子是否是上次递归的父母,是则有关系
{
if(findnode(a,b,n,m,b[i][1],y,len+1,mode)) //从父亲这找到了
{
return true;
}
else if(findnode(a,b,n,m,b[i][2],y,len+1,mode)) //从母亲这找到了
{
return true;
}
}
}
}
return false;
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int n,m;
while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0)
{
char rel[27][3],pro[51][2];
for(int i = 0;i<n;i++)
{
scanf("%s",rel[i]);
}
for(int j = 0;j<m;j++)
{
scanf("%s",pro[j]);
}
int len1 = 0;
int len2 = 0;
for(int i =0;i<m;i++)
{
bool p,q;
p=findnode(pro,rel,n,m,pro[i][1],pro[i][0],len1,1); //找是否为父母
q=findnode(pro,rel,n,m,pro[i][0],pro[i][1],len2,2); //找是否为孩子
if(p==false&&q==false) //从两个方向朝一个方向走,返回FALSE输出找不到
{
printf("-\n");
}
}
}
return 0;
}
/**************************************************************
Problem: 1035
User: xing9634
Language: C++
Result: Accepted
Time:0 ms
Memory:1520 kb
****************************************************************/