Prim ' s Algorithmus für die Generierung von einem Labyrinth: Immer die Nachbar-Zelle

Ich bin stützend einen Labyrinth-generator-Programm auf dem Prim-Algorithmus:

Dieser Algorithmus ist eine randomisierte version des Prim-Algorithmus.

  1. Beginnen Sie mit einem Netz voller Wände.
  2. Wählen Sie eine Zelle, markieren Sie Sie als Teil des Labyrinths. Fügen Sie die Wände der Zelle mit der Wandmalerei.
  3. Zwar gibt es Wände in der Liste:
    1. Wählen Sie eine zufällige Wand aus der Liste.
      Wenn die Zelle auf der gegenüberliegenden Seite nicht in das Labyrinth noch:

      1. Machen die Wand ein Durchgang, und markieren Sie die Zelle auf der gegenüberliegenden Seite als Teil des Labyrinths.
      2. Fügen Sie die benachbarten Wände der Zelle mit der Wandmalerei.
    2. Wenn die Zelle auf der gegenüberliegenden Seite war schon in das Labyrinth, entfernen Sie die Wand aus der Liste.

(aus Wikipedia)

Verstehe ich den Algorithmus schon, ich bin nur fest auf diesen Teil:
"Zu wissen, ob der Nachbar Zelle bildet einen Teil des Labyrinths oder nicht" (das bedeutet, dass Immer der Nachbar Zelle zuerst)
Die Zellen sind eigentlich Knoten eines Baumes (das Labyrinth, ein bi-dimensionales array von Zellen) und die Wände sind die Kanten zwischen diesen Knoten, ich dachte, es wäre notwendig, zu erkennen, jede Wand mit einem paar von Punkten (x,y). Wie weiß ich, ob zwei Zellen miteinander verbunden sind durch eine Wand?
(denken Sie daran, dass jede Zelle hat 4 Wände)

Ich dachte über die Verwendung der equals () - Funktion. Ich Frage nur für einen pseudo-code oder Ihre beste Erklärung zu, würde die Dinge einfacher.

Meiner Wand Klasse hat drei Attribute: bool isWall(bestimmt, ob es eine Wand oder einen Durchgang zwischen den Zellen); int x; int y (Identifier).

Wenn Sie denken, dass ich brauchen würde, mehr Attribute ich das gerne wissen. Ich weiß, es gibt einen einfachen Weg, ich bin nur geklebt 😉
Vielen Dank für Ihre Zeit!

  • Übrigens, ich bin stützend einige der Umsetzung auf diesen code, gepostet von @danny.lesnik: stackoverflow.com/questions/11459752/...
  • Sie überlegen, eine Wand, definiert durch das jeweilige paar von Zellen trennt.
  • Also das hinzufügen zu @bcr das bedeutet, dass ein Wand-Objekt hätte "isWall' und 'cell1' und 'cell2' als Attribute. Die Zellen sollten entweder die x -, y-Position in Ihnen, oder Sie würde schauen durch das Labyrinth-array, um es zu finden. Nur mit x und y ist ein problem für eine Wand-als das nicht definieren. Jede Wand kann verstanden werden als die Verbindung von zwei x,y-Stellungen, ob Sie denken, der Ecken einer Zelle in einem raster Punkt oder die Zentren der Zelle.
  • Die Wand-Liste zu haben, eine Zelle + Wand-pair-Mädchen in ihm Sinn zu machen. Eine Wand allein hat kein "gegenüber" - Seite. Sie haben entweder eine Zelle, so dass Sie überprüfen können, die gegenüber einem ODER man könnte einfach beide Zellen. Man wird immer in das Labyrinth, weil das ist, wie die Mauern Holen Sie sich in die Liste der Wände. Der andere könnte oder nicht.
Schreibe einen Kommentar