使用C++找到遍歷N叉樹的方式的數量
給定一個N叉樹,我們的任務是找到遍歷這棵樹的總方式數,例如−
#對於上面的樹,我們的輸出將是192。
對於這個問題,我們需要一些組合學的知識。現在在這個問題中,我們只需要檢查每條路徑的所有可能組合,這將給我們答案。
找到解決方案的方法
在這個方法中,我們只需要執行一次層次遍歷,檢查每個節點有多少個子節點,然後將其階乘乘以答案。
範例
上述方法的C 程式碼
#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; }
Output
4 1 2 2 1 0 0 1 2 0 0 0 0 0 192
上述程式碼的解釋
在在這種方法中,我們應用BFS(廣度優先搜尋)或層次遍歷,並檢查每個節點的子節點數量。然後,將該數量的階乘乘以我們的答案。
結論
本教學介紹了幾種遍歷N叉樹組合的方法,並應用了BFS。我們也學習了解決這個問題的C 程序和完整的方法。
我們可以用其他語言(如C、Java、Python和其他語言)寫相同的程式。希望你覺得這個教學有幫助。
以上是使用C++找到遍歷N叉樹的方式的數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在準確率-召回率曲線上,同樣的點是用不同的座標軸繪製的。警告:左邊的第一個紅點(0%召回率,100%精確度)對應0條規則。左邊的第二個點是第一個規則,等等。 Skope-rules使用樹模型產生規則候選項。首先建立一些決策樹,並將從根節點到內部節點或葉節點的路徑視為規則候選項。然後透過一些預先定義的標準(如精確度和召回率)對這些候選規則進行過濾。只有那些精確度和召回率高於其閾值的才會被保留。最後,應用相似性過濾來選擇具有足夠多樣性的規則。一般情況下,應用Skope-rules來學習每個根本原因的

分布外(OOD)检测对于开放世界智能系统的可靠运行至关重要,但目前面向对象的检测方法存在「评估不一致」(evaluationinconsistencies)的问题。之前的工作OpenOODv1统一了OOD检测的评估,但在可扩展性和可用性方面仍然存在限制。最近开发团队再次提出OpenOODv1.5,相比上一版本,新的OOD检测方法评估在确保准确、标准化和用户友好等方面得到显著提升。图片Paper:https://arxiv.org/abs/2306.09301OpenOODCodebase:htt

Linux指令是系統管理員日常工作中不可或缺的工具之一,它們可以幫助我們完成各種系統管理任務。在維運工作中,有時候需要查看系統中某個進程的數量以便及時發現問題和進行調優。本文將介紹如何使用Linux指令查看telnet進程的數量,讓我們一起來學習吧。在Linux系統中,我們可以使用ps指令結合grep指令來查看telnet進程的數量。首先,我們需要打開終端,

在Java中,在執行時間傳遞參數的一種方法是使用命令列或終端機。在檢索命令列參數的這些值時,我們可能需要查找使用者在執行時間提供的參數數量,這可以藉助length屬性來實現。本文旨在藉助範例程式解釋傳遞和獲取使用者提供的參數數量的過程。在取得使用者在執行時提供的參數數量在尋找命令列參數的數量之前,我們的第一步是建立一個允許使用者在執行時間傳遞參數的程式。字串[]參數在寫Java程式時,我們經常遇到main()方法。當JVM呼叫此方法時,Java應用程式開始執行。它與一個名為String[]args的參數一起使

給定一個N叉樹,我們的任務是找到遍歷這棵樹的總方式數,例如−對於上面的樹,我們的輸出將是192。對於這個問題,我們需要一些組合學的知識。現在在這個問題中,我們只需要檢查每條路徑的所有可能組合,這將給我們答案。找到解決方案的方法在這個方法中,我們只需要執行一次層次遍歷,檢查每個節點有多少個子節點,然後將其階乘乘以答案。範例上述方法的C++程式碼#include<bits/stdc++.h>usingnamespacestd;structNode{//s

在本文中,我們將使用C++解決尋找最大值和最小值相同的子數組數量的問題。以下是該問題的範例−Input:array={2,3,6,6,2,4,4,4}Output:12Explanation:{2},{3},{6},{6},{2 },{4},{4},{4},{6,6},{4,4},{4,4}and{4,4,4}arethesubarrayswhichcanbeformedwithmaximumandminimumelementsame.Input:array={3,3, 1,5,

二元樹是一種資料結構,其中每個節點最多可以有兩個子節點。這些孩子分別稱為左孩子和右孩子。假設我們得到了一個父數組表示,您必須使用它來建立一棵二元樹。二元樹可能有幾個等腰三角形。我們必須找到該二元樹中可能的等腰三角形的總數。在本文中,我們將探討幾種在C++中解決這個問題的技術。理解問題給你一個父數組。您必須以二元樹的形式表示它,以便數組索引形成樹節點的值,而數組中的值給出該特定索引的父節點。請注意,-1始終是根父節點。下面給出的是一個數組及其二元樹表示。 Parentarray=[0,-1,3,1,

子數組是數組的連續部分。例如,我們考慮一個數組[5,6,7,8],那麼有十個非空子數組,如(5),(6),(7),(8),(5,6),(6, 7)、(7,8)、(5,6,7)、(6,7,8)和(5,6,7,8)。在本指南中,我們將解釋在C++中尋找所有可能的資訊來尋找具有奇數和的子數組的數量。為了找到奇數和的子數組的數量,我們可以使用不同的方法,所以這裡是一個簡單的例子-Input:array={9,8,7,6,5}Output:9Explanation:Sumofsubarray-{9}= 9{7
