进阶实验4-3.1 家谱处理 (30分)
Posted snzhong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进阶实验4-3.1 家谱处理 (30分)相关的知识,希望对你有一定的参考价值。
解题思路:采用结构体来存储家谱
其中需要注意的是祖先和后代的判断
#include <stdio.h> #include <string.h> typedef struct { char s[71]; int space; int parent; } Genealogy; int getparent(Genealogy gene[],int t,int cnt) {//从后向前查找,找到第一个空格相差2个的下标即为双亲下标 int i; for(i=t-1; i>=0; i--) { if(cnt-gene[i].space==2) { return i; } } } int getPos(Genealogy gene[],int t,char str[]) {//查询所在gene结构体数组中的位置下标 int i; for(i=0; i<t; i++) { if(!strcmp(gene[i].s,str)) return i; } } int JudgeDe(Genealogy gene[],int t,int pos1,int pos2) {//判断是否存在祖先关系,若判断是否存在后代关系,则只要将pos1和pos2的位置对调即可 int i=pos1; while(i&&gene[i].parent!=pos2) { i=gene[i].parent; } if(gene[i].parent==pos2) return 1; return 0; } int main() { int n,m; scanf("%d %d ",&n,&m); Genealogy gene[n]; int i,t=0; char c[71]; char str[71]; for(i=0; i<n; i++) { gets(c); int j=0,k=0; int cnt=0; while(c[j]!=‘