PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kombinatorik in PHP


Nimroy
13.12.2005, 18:22:04
Hi.

Ich beschäftige mich gerade ein wenig mit simpler Kombinatorik und hab mir selbst folgende Übungsaufgabe gestellt.

Die Zahlen von 1 bis 6 sollen paarweise kombiniert werden. Dabei soll es aber bestimmt Bedingungen geben. Klar, das eine Zahl nicht sich selbst zugeordnet werden kann. Und jede Zahl kann natürlich nur einmal zugeordnet werden. Außerdem gibt es bestimmt Ausschlüsse. Zum Beispiel darf die 4 nicht der 1 zugeordnet werden. oder die 3 nicht der 6. Das ist vollkommen willkürlich.

Mein Ansatz wäre jetzt folgender:
Zuerst initialisiere ich drei Arrays, jeweils von 1 bis 6. Zum einen den Array "Paare" zum anderen den Array "belegt" und zu guter letzt den Array "Bedingungen". "Bedingungen" enthält an der entsprechenden Stelle/Index die nicht erlaubte Zahl, alle anderen Indizes sind mit dem Wert 0 belegt.
Danach kommt ne Schleife. Für jeden Index lass ich ne Zufallszahl zwischen 1 und 6 ausgeben. Wenn diese Zahl ungleich dem aktuellen Index ist UND ungleich dem Wert an der gleichen Stelle im Array "Bedingungen" UND der Wert an der ermittelten Stelle im Array "Status" 0 ist, dann wird die Zahl in den Array Paare als Wert des aktuellen Indexes geschrieben. Ist eine der Bedingungen nicht erfüllt, dann wird eben ne neue Zahl ermittelt.

Beispiel.
Ich duchlaufe die Schleife für die 1. Die erste Zufallszahl ist die 4. Die 4 ist != 1 , aber an der ersten Stelle im Array "Bedingungen steht die 4. Die Schleife startet erneut und die 3 wird ausgegeben. 3 ist != 1, 3 != 4 und der Status der 3ten Stelle im Array "belegt" ist false. Die 3 wird also als Wert bei Index 1 des Arrays "Paare eingetragen" und der ditte Index im Array "belegt" wird auf "true" gesetzt. Das Spiel beginnt jetzt für die zwei

Ist mein Ansatz soweit richtig oder hab ich irgendwo nen Denkfehler drin? Gibt es elegantere Lösungen? Und wie fange ich ab, wenn ich bei dem letzten Index nur noch eine Zahl (logischerweise) übrig hab und ausgerechnet diese nicht erlaubt ist?