2017-12-22 2 views
1

Nur zum Spaß Ich versuche, eine Nicht-Flash-Version von http://www.jurjans.lv/stuff/net/FreeNet.htm zu erstellen. Es ist alles ziemlich geradlinig, aber ich bin mental daran fest, wie man das anfängliche Netzwerk generiert.Algorithmus zum Erzeugen eines Netzwerks, das ein 10x10-Gitter mit einer Quelle, horizontalen Linien, rechten Winkeln, T-Verzweigungen und Knoten füllt?

Ich könnte es Quadrat für Quadrat mit vielen If/Else-Logik machen, die benachbarte Quadrate überprüft, aber offen gesagt scheint es sehr arbeitsam und ich frage mich, wenn es viel viel viel klügere Weise gibt. Erzeugen Sie eine mathematische Grafik oder etwas ähnliches und übersetzen Sie diese dann in das Gitter?

Ich frage nicht nach jemandem, der alles für mich programmiert - zeigen Sie mir einfach in die richtige Richtung!

+0

Mein Problem ist, dass ich bereits in einer Nicht-Flash-Umgebung bin und nicht sehen kann, was auf der Seite ist, die Sie verknüpft haben. Kannst du mehr erklären? – Vroomfondel

+0

https://i.imgur.com/HQCSOii.png; ein Spiel, in dem Sie jedes Quadrat drehen müssen, bis das Netzwerk/die Schaltung "abgeschlossen" ist und alles beleuchtet ist. Was ich versuche, ist ein Algorithmus, um zufällig eine gültige abgeschlossene Schaltung zu generieren, die ich dann zufällig rotieren würde, um das ursprüngliche Spielfeld zu erstellen. – Codemonkey

Antwort

2

Die fertige Schaltung scheint ein spannender Baum zu sein.

Es ist eine einfache Möglichkeit zur Erzeugung von random minimum spanning trees:

Zuordnen Zufallsgewichte von einiger Verteilung an die Kanten eines ungerichteten Graphen, und dann den minimalen Spanning-Tree des Diagramms zu konstruieren.

  1. Bauen in der Mitte jedes Quadrates

  2. Kanten hinzufügen zwischen jedem Scheitelpunkt und seinen Nachbarn oben/unten/links/rechts

    mit einem Scheitelpunkt ein Graph:

So zusammenzufassen

  • Weisen Sie jeder Kante zufällige Gewichte zu (z. B. uniform real von 0 bis 1)

  • Konstruieren minimum spanning tree z.B. mit Prim oder Kruskal

  • Convert Graph in Kacheln

  • Wenn es bestimmte Formen, die Sie (zB über eine voll angeschlossen Vertex) Sie möchten eine zusätzliche Iteration zu erhöhen, das Gewicht für Kanten verwendet verbieten wollen in alle Kacheln, die illegal sind, und regenerieren Sie dann den Spanning-Tree, bis Sie mit einem gültigen Diagramm enden.

    +0

    Danke, ich kenne praktisch nichts von der Graphentheorie (wenn es überhaupt so heißt), also ist das für mich hauptsächlich griechisch, aber ich werde etwas lesen und graben und es hoffentlich herausfinden! – Codemonkey

    Verwandte Themen