"思路:\n1.首先找到老祖宗的编号,即父/母编号为-1的成员。\n2.使用一个数组level来记录每个成员的辈分,初始化为0。\n3.从老祖宗开始,递归地计算每个成员的辈分,即其父/母的辈分加1。\n4.找到辈分最小的成员,输出其辈分以及所有辈分为最小的成员的编号。\n\n代码如下:\n\n#include <stdio.h>\n\nvoid findAncestor(int n, int parent[], int level[]) {\n int i;\n for (i = 1; i <= n; i++) {\n if (parent[i] == -1) {\n level[i] = 1; //老祖宗的辈分为1\n break;\n }\n }\n}\n\nvoid calculateLevel(int n, int parent[], int level[]) {\n int i;\n for (i = 1; i <= n; i++) {\n if (level[i] == 0) {\n calculateLevel(n, parent, level); //递归计算成员的辈分\n level[i] = level[parent[i]] + 1;\n }\n }\n}\n\nvoid findMinGeneration(int n, int level[]) {\n int minLevel = level[1];\n int i;\n for (i = 2; i <= n; i++) {\n if (level[i] < minLevel) {\n minLevel = level[i];\n }\n }\n printf("%d\n", minLevel);\n for (i = 1; i <= n; i++) {\n if (level[i] == minLevel) {\n printf("%d ", i);\n }\n }\n}\n\nint main() {\n int n;\n scanf("%d", &n);\n int parent[n+1];\n int level[n+1];\n int i;\n for (i = 1; i <= n; i++) {\n scanf("%d", &parent[i]);\n }\n findAncestor(n, parent, level);\n calculateLevel(n, parent, level);\n findMinGeneration(n, level);\n return 0;\n}

C语言代码:查找家谱中最小的辈分

原文地址: https://www.cveoy.top/t/topic/pPAj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录