Étant donné un arbre N-aire, notre tâche est de trouver le nombre total de façons de parcourir l'arbre, par exemple −
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.
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.
Code C++ de la méthode ci-dessus
#include<bits/stdc++.h> using namespace std; struct Node{ // structure of our node char key; vector<Node *> 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<Node*> 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; }
4 1 2 2 1 0 0 1 2 0 0 0 0 0 192
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.
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!