思路:

  1. 首先将输入的家谱存储为一个vector<int>的数组,数组下标表示成员编号,数组值表示父/母编号。
  2. 创建一个vector<int>的数组level,用来存储每个成员的辈分。
  3. 从老祖宗开始,递归地计算每个成员的辈分,直到计算到没有父/母的成员为止。
  4. 统计辈分最小的成员的编号,输出最小的辈分和编号。

代码如下:

#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

// 递归计算成员的辈分
int calculateLevel(vector&lt;int&gt;&amp; family, vector&lt;int&gt;&amp; level, int member) {
    if (level[member] != 0) {
        return level[member];
    }
    int parent = family[member];
    if (parent == -1) {
        level[member] = 1;
    } else {
        level[member] = calculateLevel(family, level, parent) + 1;
    }
    return level[member];
}

int main() {
    int N;
    cin &gt;&gt; N;
    vector&lt;int&gt; family(N + 1);
    for (int i = 1; i &lt;= N; i++) {
        cin &gt;&gt; family[i];
    }

    vector&lt;int&gt; level(N + 1, 0);
    int minLevel = INT_MAX;
    for (int i = 1; i &lt;= N; i++) {
        int curLevel = calculateLevel(family, level, i);
        minLevel = min(minLevel, curLevel);
    }

    cout &lt;&lt; minLevel &lt;&lt; endl;
    for (int i = 1; i &lt;= N; i++) {
        if (level[i] == minLevel) {
            cout &lt;&lt; i &lt;&lt; " ";
        }
    }

    return 0;
}
C++ 代码:查找家族家谱中的最小辈分

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

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