Erzeuge Pfade auf dem n * n Gitter

8

Ich habe n*n grid, wo zB n=10 . Ich muss es mit Schwarz-Weiß-Elementen füllen. Jedes schwarze Element muss einen, zwei oder drei schwarze Nachbarn haben. Es ist nicht erlaubt, schwarze Elemente mit vier oder null Nachbarn zu enthalten.

Wie soll ich diese Art von Gitter erstellen?

Bearbeiten:

Genauer gesagt ist es ein zweidimensionales Array, das zum Beispiel mit zwei for -Schleifen erstellt wurde:

%Vor%

Dieser Pseudocode baut etwas wie folgt auf:

Und was ich erwarte ist:

    
hsz 30.10.2012, 14:31
quelle

3 Antworten

4

Offensichtlich versucht man, "schwarze Pfad" -Formen auf einem Schreibraster zu erzeugen.

Also lass es uns einfach machen.

  • Beginne mit einem weißen Gitter.
  • Platziere zufällig einige Schildkröten darauf.
  • Dann, während Ihr Gitter nicht das richtige Weiß / Schwarz-Zellen-Verhältnis erreicht, gehen Sie wie folgt vor
    • Bewegen Sie jede Schildkröte in eine zufällige Richtung und malen Sie sie schwarz, es sei denn, dies bricht die Regel "nicht mehr als drei schwarze Nachbarn".
Nicolas Repiquet 30.10.2012, 15:10
quelle
2

Vielleicht könnte dieser Python-Code nützlich sein. Die Grundidee besteht darin, zunächst eine Art Querdurchlauf des Gitters durchzuführen, wobei sichergestellt wird, dass die geschwärzten Pixel die Beschränkung respektieren, dass sie nicht mehr als drei schwarze Nachbarn haben. Das Diagramm, das dem geschwärzten Teil des Gitters entspricht, ist ein Baum, wie es Ihr gewünschtes Ergebnis zu sein scheint.

%Vor%

Hier ist eine Ergebniseinstellung size = 50

und eine weitere Einstellung size = 1000

Sie können auch mit der Wurzel des Baumes spielen.

    
Vincent Nivoliers 30.10.2012 17:05
quelle
1

Mit der Größe, die Sie hier zeigen, können Sie leicht auf eine Brute-Force-Implementierung zurückgreifen.

Schreiben Sie eine Funktion, die überprüft, ob Sie die Anforderungen erfüllen, indem Sie einfach alle Zellen durchlaufen und Nachbarn zählen.

Danach tun Sie etwas wie folgt:

%Vor%

Wenn Ihr Raster groß ist (Tausende von Pixeln), sollten Sie wahrscheinlich nach einem effizienteren Algorithmus suchen, aber für ein 10x10 Raster wird dies blitzschnell berechnet.

    
Wouter van Nifterick 30.10.2012 15:32
quelle