Hallo LinkinMaster!
Ich komme leider etwas spät zum Antworten, aber ich hätte einen allgemeineren Lösungsvorschlag.
Dein Ziel ist es, DIMENSION Zahlen zwischen 1 und einer Obergrenze (nennen wir sie mal ANZAHL_KNOTEN) zu finden.
Nehmen wir das von dir gezeigte Beispiel an:
DIMENSION = 2
ANZAHL_KNOTEN = 3
Spielen wir das ganze durch.
Auswahl 1, 1. Zahl:
Wir versuchen zuerst die kleinste Zahl zu verwenden, also 1. Du willst keine Duplikate innerhalb einer Auswahl, deshalb muss zuerst überprüft werden, ob die Zahl schon verwendet wurde. Nachdem wir zu diesem Zeitpunkt noch keine Auswahl getroffen haben, können wir im ersten Schritt 1 auswählen.
Auswahl 1, 2. Zahl:
Auch bei der zweiten Auswahl beginnen wir wieder bei 1 zu zählen. Allerdings haben wir diese schon verwendet, deswegen erhöhen wir den Wert und fügen die Zahl 2 zur Auswahl hinzu.
An diesem Punkt haben wir DIMENSION Zahlen ausgewählt und wir können sie ausgeben: 1-2
Auswahl 2, 2. Zahl:
2. Zahl? Ja. Anstatt komplett von vorne zu beginnen, gehen wir an dieser Stelle nur einen Schritt zurück. Wir gehen zur 3 weiter: 1-3
DIMENSION Zahlen wurden ausgewählt: 1-3
ANZAHL_KNOTEN wurde erreicht, die letzte Zahl kann nicht mehr erhöhen. Wir gehen nun noch einen Schritt zurück.
Auswahl 3, 1. Zahl:
An Position 1 steht der Wert 1. Für diese Ausgangssituation haben wir allerdings bereits alle möglichen Permutationen erstellt. Wir erhöhen also an der ersten Stelle auf den Wert 2.
Auswahl 3, 2. Zahl:
Beginnen wir wieder bei 1 zu zählen. Aktuell ist diese auch noch frei, also wählen wir sie aus.
DIMENSION Zahlen wurden ausgewählt: 2-1
Auswahl 4, 2. Zahl:
Erhöhen wir die zweite Stelle, bekommen wir 2. Allerdings wurde dieser Wert bereits an der ersten Stelle verwendet und wir springen direkt zu 3 weiter.
DIMENSION Zahlen wurden ausgewählt: 2-3
ANZAHL_KNOTEN wurde erreicht, die letzte Zahl kann nicht mehr erhöhen. Wir gehen nun noch einen Schritt zurück.
Auswahl 5, 1. Zahl:
An Position 1 steht der Wert 2. Für diese Ausgangssituation haben wir allerdings bereits alle möglichen Permutationen erstellt. Wir erhöhen also an der ersten Stelle auf den Wert 3.
Auswahl 5, 2. Zahl:
Beginnen wir wieder bei 1 zu zählen. Aktuell ist diese auch noch frei, also wählen wir sie aus.
DIMENSION Zahlen wurden ausgewählt: 3-1
Auswahl 6, 2. Zahl:
An Position 2 wird auf 2 erhöht. Diese Zahl ist noch unbenutzt und wird ausgewählt.
DIMENSION Zahlen wurden ausgewählt: 3-2
Wird die zweite Position erhöht, kommen wir auf die bereits verwendete 3 und haben ANZAHL_KNOTEN erreicht. Wir gehen noch einen Schritt zurück, allerdings wurde auch hier ANZAHL_KNOTEN bereits erreicht. Es gibt keine weiteren Möglichkeiten mehr, fertig.
Dieses Schema lässt sich unabhängig von der Anzahl der Dimensionen realisieren. Du merkst allerdings, dass du für jeden Schritt einen Zustand brauchst, zu dem du zurückkehren kannst, wenn du mit allen Permutationen fertig bist. Das ist ein Anzeichen für ein rekursives Problem:
https://www.proggen.org/doku.php?id=c:t ... #rekursion
Was ist der Vorteil einer rekursiven Lösung gegenüber der von dir? Du hast aktuell für jede Dimension eine Schleifen-Ebene und fixe hardcodierte Array-Indizes. Du hast vielleicht schon gemerkt, dass das bei 5 Dimensionen etwas unübersichtlich und chaotisch wurde. Bei einer rekursiven Lösung ist das nicht der Fall. Sie benötigt für 100 Dimensionen gleich viel Code wie für 2 und kommt komplett ohne fixe Indizes aus.