Diese Frage ist chaotisch, ich brauche keine funktionierende Lösung, ich brauche etwas Pseudo-Code.Ein Labyrinth mit Multicores lösen?
Wie würde ich dieses Labyrinth lösen? Dies ist eine Hausaufgabenfrage. Ich muss von Punkt Grün zu Rot kommen. Bei jeder Gabel muss ich einen Faden spawnen und in diese Richtung gehen. Ich muss herausfinden, wie ich zu rot komme, aber ich bin nicht sicher, wie ich Wege vermeiden kann, die ich bereits genommen habe (das Beenden mit jedem Pfad ist in Ordnung, ich darf nur nicht im Kreis fahren).
Hier ist ein Beispiel für mein Problem, ich beginne mit der Bewegung nach unten und ich sehe eine Gabel, so geht man nach rechts und man geht nach unten (oder dieser Thread kann es nehmen, es spielt keine Rolle). Jetzt ignorieren wir den Rest der Gabeln und sagen, dass derjenige, der nach rechts geht, gegen die Wand schlägt, nach unten geht, gegen die Wand schlägt und nach links geht, dann nach oben geht. Der andere Thread geht runter, trifft die Wand und geht dann ganz nach rechts. Der untere Pfad wurde zweimal genommen, indem an verschiedenen Seiten begonnen wurde.
Wie kann ich diesen Pfad markieren? Brauche ich ein Schloss? Ist das der einzige Weg? Gibt es eine locklose Lösung?
Implementierung weise ich dachte, ich könnte das Labyrinth so etwas haben. Ich mag die Lösung nicht, weil es viele Sperren gibt (vorausgesetzt, ich sperre vor jedem Lesen und Schreiben des haveTraverse-Mitglieds). Ich brauche nicht die MazeSegment-Klasse unten, ich habe es nur als Beispiel geschrieben. Ich darf das Labyrinth bauen, wie ich will. Ich dachte, vielleicht braucht die Lösung keine Verbindungspfade, und das macht mich nervös. Vielleicht könnte ich die Map aufteilen, anstatt das Format unten zu verwenden (was einfach zu lesen und zu verstehen ist). Aber wenn ich wüsste, wie man es aufteilt, würde ich wissen, wie man es geht, also das Problem.
Wie gehe ich dieses Labyrinth effizient?
Der einzige Hinweis, den ich erhalte, war nicht versuchen, Speicher zu sparen, indem Sie es wiederverwenden, Kopien machen. Allerdings war das auf ein Problem mit der Bestellung einer Liste zurückzuführen und ich denke nicht, dass der Hinweis ein Hinweis dafür war.
class MazeSegment
{
enum Direction { up, down, left, right}
List<Pair<Direction, MazeSegment*>> ConnectingPaths;
int line_length;
bool haveTraverse;
}
MazeSegment root;
class MazeSegment
{
enum Direction { up, down, left, right}
List<Pair<Direction, MazeSegment*>> ConnectingPaths;
bool haveTraverse;
}
void WalkPath(MazeSegment segment)
{
if(segment.haveTraverse) return;
segment.haveTraverse = true;
foreach(var v in segment)
{
if(v.haveTraverse == false)
spawn_thread(v);
}
}
WalkPath(root);
Haben Sie Ihren Lehrer/Professor gefragt, ob es in Ordnung ist, Hilfe wie diese zu erbitten? – EmeryBerger
Könnte dies eines der Probleme sein, die eine superlineare Beschleunigung von der Parallelität bekommen? –
Danke an alle, die geantwortet haben. Ich mag sie wirklich! (und @emery, ja, er sagte, du kannst Freunde fragen, aber versuche es herauszufinden, bevor du fragst. Ich dachte nur, Schlösser wären nicht die optimale Lösung) –