Wie man diesen Baum / Graphen iteriert

9

Ich muss einen Baum / Graphen durchlaufen und eine bestimmte Ausgabe erzeugen, aber einige Regeln beachten:

%Vor%

Die erwartete Ausgabe sollte (Reihenfolge nicht relevant) sein:

%Vor%

Die Regeln lauten:

  1. Die Spitze des Baumes 'bde' (leftmost_root_children + root + rightmost_root_children) sollte immer vorhanden sein
  2. Die Reihenfolge von links nach rechts sollte beibehalten werden, zum Beispiel sind die Kombinationen "cb" oder "gf" nicht erlaubt.
  3. Alle Pfade folgen der Richtung von links nach rechts.

Ich muss alle Pfade finden, die diesen Regeln folgen. Leider habe ich keinen CS Hintergrund und mein Kopf explodiert. Jeder Tipp wird hilfreich sein.

EDIT: Diese Struktur repräsentiert meinen Baum sehr genau:

%Vor%

oder besser lesbar:

%Vor%     
Biela Diela 28.04.2015, 23:50
quelle

1 Antwort

3

Dies kann also als eine Kombination von zwei Problemen behandelt werden. Im folgenden Code wird davon ausgegangen, dass die N -Klasse und die tree -Struktur bereits in Ihrer Problembeschreibung definiert wurden.

Erstens: Bei einer Baumstruktur wie Ihrer, wie erzeugen Sie eine In-Order-Traversierung seiner Knoten? Das ist ein ziemlich einfaches Problem, also zeige ich einfach einen einfachen rekursiven Generator, der es löst:

%Vor%

Zweitens: Jetzt, da wir die "richtige" Reihenfolge der Knoten haben, müssen wir als nächstes alle möglichen Kombinationen von diesen herausfinden, die a) diese Reihenfolge beibehalten, und b) enthalten die drei "Anker" -Elemente ( 'b', 'd', 'e' ). Dies können wir mit Hilfe der immer nützlichen itertools Bibliothek erreichen.

Die grundlegenden Schritte sind:

  • Identifizieren Sie die Ankerelemente und partitionieren Sie die Liste in vier Teile um sie herum
  • Finde alle Kombinationen von Elementen für jede Partition (d. h. die Potenzmenge)
  • heraus
  • Nimm das Produkt all dieser Kombinationen

Wie so:

%Vor%     
tzaman 29.04.2015, 01:54
quelle

Tags und Links