【九度OJ】题目1035:找出直系亲属

来源:互联网 发布:淘宝男装代理一手货源 编辑:程序博客网 时间:2024/05/21 10:17

这道题一看就知道是水题,但是却做了好久,原因是递归自增没处理好,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");elseprintf("parent\n");elseif(len>=2)printf("grandchild\n");elseprintf("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****************************************************************/

0 0
原创粉丝点击