Maison> développement back-end> C++> le corps du texte

Trouver le nombre de façons de parcourir un arbre N-aire en utilisant C++

王林
Libérer: 2023-09-04 17:01:17
avant
841 Les gens l'ont consulté

Étant donné un arbre N-aire, notre tâche est de trouver le nombre total de façons de parcourir l'arbre, par exemple −

Trouver le nombre de façons de parcourir un arbre N-aire en utilisant C++

Pour l'arbre ci-dessus, notre résultat sera de 192.

Pour ce problème, nous avons besoin de quelques connaissances en combinatoire. Maintenant, dans ce problème, il nous suffit de vérifier toutes les combinaisons possibles de chaque chemin et cela nous donnera la réponse.

Méthode pour trouver la solution

Dans cette méthode, il nous suffit d'effectuer un parcours de niveau, de vérifier combien d'enfants a chaque nœud, puis de le multiplier factoriellement par la réponse.

Exemple

Code C++ de la méthode ci-dessus

#include using namespace std; struct Node{ // structure of our node char key; vector child; }; Node *createNode(int key){ // function to initialize a new node Node *temp = new Node; temp->key = key; return temp; } long long fact(int n){ if(n <= 1) return 1; return n * fact(n-1); } int main(){ Node *root = createNode('A'); (root->child).push_back(createNode('B')); (root->child).push_back(createNode('F')); (root->child).push_back(createNode('D')); (root->child).push_back(createNode('E')); (root->child[2]->child).push_back(createNode('K')); (root->child[1]->child).push_back(createNode('J')); (root->child[3]->child).push_back(createNode('G')); (root->child[0]->child).push_back(createNode('C')); (root->child[2]->child).push_back(createNode('H')); (root->child[1]->child).push_back(createNode('I')); (root->child[2]->child[0]->child).push_back(createNode('N')); (root->child[2]->child[0]->child).push_back(createNode('M')); (root->child[1]->child[1]->child).push_back(createNode('L')); queue q; q.push(root); long long ans = 1; while(!q.empty()){ auto z = q.front(); q.pop(); ans *= fact(z -> child.size()); cout << z->child.size() << " "; for(auto x : z -> child) q.push(x); } cout << ans << "\n"; return 0; }
Copier après la connexion

Output

4 1 2 2 1 0 0 1 2 0 0 0 0 0 192
Copier après la connexion

Explication du code ci-dessus

Dans cette méthode, nous appliquons BFS (Breadth First Search) ou parcours hiérarchique et vérifions les enfants de chaque nœud Nombre de nœuds. Ensuite, multipliez la factorielle de cette quantité par notre réponse.

Conclusion

Ce tutoriel a présenté plusieurs méthodes de parcours de combinaisons d'arbres N-aires et appliqué BFS. Nous avons également appris le programme C++ et la méthode complète pour résoudre ce problème.

Nous pouvons écrire le même programme dans d'autres langages comme C, Java, Python et d'autres langages. J'espère que vous avez trouvé ce tutoriel utile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur