Inhaltsverzeichnis
Methode
Eingabe
Ausgabe
Erklärung des obigen Codes
Fazit
Heim Backend-Entwicklung C++ Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum

Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum

Sep 16, 2023 pm 06:09 PM
权重 路径数量 K-ary-Baum

Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum

In diesem Artikel verwenden wir C++, um die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum zu zählen. Uns wurde ein K-ary-Baum gegeben, ein Baum, in dem jeder Knoten K Kinder hat und jede Kante ein Gewicht hat, wobei das Gewicht von 1 auf K von einem Knoten zu allen seinen Kindern abnimmt.

Wir müssen die kumulative Anzahl der Pfade zählen, die vom Wurzelknoten beginnen und die Gewichtung W und mindestens eine Kante mit der Gewichtung M haben. Hier ist ein Beispiel:

Input : W = 4, K = 3, M = 2

Output : 6
Nach dem Login kopieren

Im gegebenen Problem werden wir dp verwenden, um die zeitliche und räumliche Komplexität zu reduzieren. Durch die Memoisierung können wir unsere Programme schneller machen und sie an größere Einschränkungen anpassen.

Methode

Bei dieser Methode durchqueren wir den Baum und verfolgen Kanten mit oder ohne Gewicht von mindestens M und einem Gewicht gleich W und erhöhen dann die Antwort.

Eingabe

#include <bits/stdc++.h>
using namespace std;
int solve(int DP[][2], int W, int K, int M, int used){
   if (W < 0) // if W becomes less than 0 then return 0
       return 0;
    if (W == 0) {
        if (used) // if used is not zero then return 1
           return 1; //as at least one edge of weight M is included
       return 0;
   }
    if (DP[W][used] != -1) // if DP[W][used] is not -1 so that means it has been visited.
       return DP[W][used];
    int answer = 0;
   for (int i = 1; i <= K; i++) {
        if (i >= M)
           answer += solve(DP, W - i, K, M, used | 1); // if the condition is true
                                                    //then we will change used to 1.
       else
           answer += solve(DP, W - i, K, M, used);
   }
   return answer;
}
int main(){
   int W = 3; // weight.
   int K = 3; // the number of children a node has.
   int M = 2; // we need to include an edge with weight at least 2.
   int DP[W + 1][2]; // the DP array which will
   memset(DP, -1, sizeof(DP)); // initializing the array with -1 value
   cout << solve(DP, W, K, M, 0) << "\n";
   return 0;
}
Nach dem Login kopieren

Ausgabe

3
Nach dem Login kopieren

Erklärung des obigen Codes

Bei dieser Methode werden Kanten mit dem Gewicht M mindestens einmal einbezogen oder nicht. Zweitens haben wir das Gesamtgewicht des Pfades berechnet, wenn es gleich W ist.

Wir erhöhen die Antwort um eins, markieren den Pfad als besucht, fahren mit allen möglichen Pfaden fort und enthalten mindestens eine Kante mit einem Gewicht größer oder gleich M.

Fazit

In diesem Artikel haben wir dynamische Programmierung verwendet, um das Problem zu lösen, die Anzahl der Pfade mit dem Gewicht W in einem k-ary-Baum mit einer zeitlichen Komplexität von O(W*K) zu finden.

Wir haben auch ein C++-Programm und eine vollständige Methode (allgemein und effizient) gelernt, um dieses Problem zu lösen.

Das obige ist der detaillierte Inhalt vonErmitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was bedeutet Weibo-Gewicht? Was bedeutet Weibo-Gewicht? Dec 11, 2020 pm 02:36 PM

Was bedeutet Weibo-Gewicht?

Erhalten Sie ein tiefes Verständnis für die Gewichtung und Priorität von CSS-Selektor-Platzhaltern Erhalten Sie ein tiefes Verständnis für die Gewichtung und Priorität von CSS-Selektor-Platzhaltern Dec 26, 2023 pm 01:36 PM

Erhalten Sie ein tiefes Verständnis für die Gewichtung und Priorität von CSS-Selektor-Platzhaltern

Python-Programm zum Ermitteln des Gewichts eines Strings Python-Programm zum Ermitteln des Gewichts eines Strings Sep 04, 2023 pm 08:09 PM

Python-Programm zum Ermitteln des Gewichts eines Strings

Können Douyins niedrig gewichtete Konten noch gerettet werden? Wie lässt sich das beheben? Können Douyins niedrig gewichtete Konten noch gerettet werden? Wie lässt sich das beheben? Mar 07, 2024 pm 08:40 PM

Können Douyins niedrig gewichtete Konten noch gerettet werden? Wie lässt sich das beheben?

Minimaler Produktpfad mit Kanten mit einem Gewicht größer oder gleich 1 Minimaler Produktpfad mit Kanten mit einem Gewicht größer oder gleich 1 Aug 30, 2023 am 11:37 AM

Minimaler Produktpfad mit Kanten mit einem Gewicht größer oder gleich 1

Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum Sep 16, 2023 pm 06:09 PM

Ermitteln Sie mit C++ die Anzahl der Pfade mit der Gewichtung W in einem K-ary-Baum

Wie kann man das geringe Gewicht von Douyin verbessern? Was ist der Grund für das geringe Gewicht? Wie kann man das geringe Gewicht von Douyin verbessern? Was ist der Grund für das geringe Gewicht? Mar 30, 2024 am 09:31 AM

Wie kann man das geringe Gewicht von Douyin verbessern? Was ist der Grund für das geringe Gewicht?

Ermitteln Sie beim Programmieren in C++ die Anzahl der Pfade von einem Punkt zu einem anderen in einem Raster Ermitteln Sie beim Programmieren in C++ die Anzahl der Pfade von einem Punkt zu einem anderen in einem Raster Aug 29, 2023 pm 10:25 PM

Ermitteln Sie beim Programmieren in C++ die Anzahl der Pfade von einem Punkt zu einem anderen in einem Raster

See all articles