Я пишу программу семейного древа, и у меня возникают проблемы с реализацией степени родства. Я ввожу два имени, и программе необходимо вывести степень родства. Например, когда вы вводите - Элисон и Энтони, должно получиться, что Энтони - прадедушка, а в остальных случаях отец / дедушка / прадедушка. Спасибо за любые идеи / советы.
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
#include <stdlib.h>
#include "Windows.h"
using namespace std;
ifstream file;
const int n = 15;
struct family
{
string member;
family* l, * r;
}base;
family* tree = NULL;
void init() {
do {
file >> base.member;
} while (!feof);
}
void push(family** t)
{
if ((*t) == NULL)
{
(*t) = new family;
(*t)->member = base.member;
//(*t)->year = base.year;
(*t)->l = (*t)->r = NULL;
return;
}
if (base.member < (*t)->member) push(&(*t)->r);
else push(&(*t)->l);
}
void Tree_Balance(int n, family** t)
{
family* now;
int x, nl, nr;
now = *t;
if (n == 0)* t = NULL;
else
{
nl = n / 2; nr = n - nl - 1;
now = new family;
(*now).member = base.member;
//(*now).year = base.year;
Tree_Balance(nl, &((*now).l));
Tree_Balance(nr, &((*now).r));
*t = now;
}
}
void del_all(family*& t)
{
if (!t) return;
del_all(t->l);
del_all(t->r);
delete t;
t = NULL;
}
int count(family* t)
{
int result;
if (t == NULL)
{
result = 0;
}
else if ((t->l == NULL) && (t->r == NULL))
{
result = 1;
}
else
{
result = count(t->l) + count(t->r);
}
return result;
}
void Print_Tree(family** tree, int l)
{
if (*tree != NULL)
{
Print_Tree(&((**tree).r), l + 2);
for (int i = 1; i <= l; i++) cout << " ";
cout << (**tree).member << endl << endl;
Print_Tree(&((**tree).l), l + 2);
}
Tree_Balance(n, tree);
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int calc;
file.open("family.txt");
if (!file)
{
cout << " error \n ";
exit(1);
}
for (int i = 0; i < n; ++i) {
init();
push(&tree);
}
Print_Tree(&tree, 0);
calc = count(tree);
cout << endl << "members who have no children: " << calc << endl << endl;
del_all(tree);
system("pause");
return 0;
}
мой файл:
Anthony Chloe Arthur Cameron Daniela Abraham Davina Daniel Armando Alana Alison Aiden Aaron Abigale Aarav
выходы программы:
Aarav
Aaron
Abigale
Abraham
Aiden
Alana
Alison
Anthony
Armando
Arthur
Cameron
Chloe
Daniel
Daniela
Davina