Bekommen Sie den Wald aus dem Baum mit einer geraden Anzahl von Knoten
Bin ich stecken auf einem code-Herausforderung, und ich möchte eine Hinweis.
PROBLEM: Sie erhalten eine Baumstruktur (ohne Zyklen) und werden gebeten, zu entfernen, wie viele "Kanten" (verbindungen) wie möglich, auch kleinere Bäume mit geraden Nummern der Knoten. Dieses problem ist immer lösbar, da es eine gerade Anzahl von Knoten und verbindungen.
Ihre Aufgabe ist das zählen der entfernten Kanten.
Eingang:
Die erste Zeile der Eingabe enthält zwei ganze zahlen N und M. N ist die Anzahl der Knoten und M die Anzahl der Kanten. 2 <= N <= 100.
Nächsten M Zeilen enthält zwei ganze zahlen ui und vi gibt eine Kante des Baumes. (Index mit Basis 1)
Ausgabe:
Drucken Sie die Anzahl der Kanten entfernt.
Beispiel Für Die Eingabe
10 9
2 1
3 1
4 3
5 2
6 1
7 2
8 6
9 8
10 8
Beispiel-Ausgabe :
2
Erklärung : Auf das entfernen der Kanten (1, 3) und (1, 6), können wir das gewünschte Ergebnis zu erhalten.
InformationsquelleAutor der Frage g4ur4v | 2012-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwendet, BFS, Reisen durch den Knoten.
Erste, erhalten Sie ein array separat speichern, um die Gesamtanzahl der untergeordneten Knoten + 1.
So können Sie zunächst weisen alle Endknoten mit Wert 1 in diesem Feld.
Starten Sie nun aus dem letzten Knoten und die Anzahl der Kinder für jeden Knoten. Diese werden in unten nach oben Weise und in dem array speichert die Anzahl der Kind-Knoten wird die Hilfe in der runtime den code optimieren.
Sobald man das array nach der Anzahl der Kinder von Knoten für alle Knoten, nur das zählen der Knoten mit einer geraden Anzahl von Knoten gibt die Antwort. Hinweis: ich nicht-root-Knoten in der Zählung im letzten Schritt.
InformationsquelleAutor der Antwort g4ur4v
Dies ist meine Lösung. Ich habe nicht verwenden bfs-Baum, nur reserviert ein array für die Abhaltung eachnode und deren Kinder-Knoten Gesamtzahl.
InformationsquelleAutor der Antwort Eren Yagdiran
Wenn Sie beobachten, der Eingabe können Sie sehen, dass es ganz einfach um die Anzahl der Knoten, die sich unter jedem Knoten. Betrachten Sie (a b) als Kante Eingang, in jedem Fall ist das Kind und b ist die unmittelbar übergeordneten. Der Eingang hat immer Kanten dargestellt bottom-up.
So seine im wesentlichen der Anzahl der Knoten, die noch zählen(mit Ausnahme der Wurzel-Knoten ist). Ich habe den untenstehenden code auf Hackerrank und alle tests bestanden. Ich denke, alle die Fälle, in die Eingabe die Regel erfüllen.
InformationsquelleAutor der Antwort doubleo
Ich weiß, dass dies schon beantwortet wurde hier viel, viel Zeit. Ich will immer noch wissen, Bewertungen auf meine Lösung hier. Ich habe versucht zu konstruieren das Kind zählen, da waren die Ränder kommen durch den Eingang und es bestanden alle den test Fällen.
InformationsquelleAutor der Antwort Swagata Prateek
Meine erste Neigung ist, um zu arbeiten up von den Blattknoten, weil Sie nicht schneiden Sie Ihre Kanten als die single-vertex-teilstrukturen.
InformationsquelleAutor der Antwort David Harkness
Hier ist der Ansatz, den ich verwendet, um erfolgreich bestanden alle die Prüfung Fällen.
InformationsquelleAutor der Antwort kldavis4
Hier ist die Allgemeine Gliederung der alternative Ansatz:
InformationsquelleAutor der Antwort seaotternerd
Lösung - Durchlaufen aller Kanten, und die Anzahl der noch Kanten
Wenn wir entfernen eine Kante aus dem Baum, und es ergibt sich in beiden Baum mit einer geraden Anzahl von Ecken, nennen wir ' s edge - auch edge
Wenn wir entfernen eine Kante aus dem Baum, und es ergibt sich in beiden Bäumen mit merkwürdig
Anzahl der Scheitelpunkte, sagen wir mal, dass edge - ungerade Kante
Hier ist meine Lösung in Ruby
Hinweis - Klicken Sie Hier zu überprüfen, die code für Graph, Node und Edge-Klassen
InformationsquelleAutor der Antwort satnam