Die Aufnahme einer Labyrinth-Pfad-Lösung mit einem Stapel

Ich bin zu generieren, die eine Lösung für ein Labyrinth mit einer linked-list-Implementierung eines Stacks in gewisser Weise. Das Labyrinth ist Lesen in einem .txt-Datei und enthält 0 ist für Freiflächen und 1 für Wände. Die Aufnahme einer Labyrinth-Pfad-Lösung mit einem Stapel
<- Ziemlich sicher, dass ein exit muss in der unteren Zeile? Diese drei 0?

Den Algorithmus, den ich bin versucht zu verwenden ist:

While Not At End
    If Can Go North
        Go North
    ElseIf Can Go East
        Go East
    ElseIf Can Go South
        Go South
    ElseIf Can Go West 
        Go West
    EndIf
Wend

Den Weg habe ich schon versucht es beruhte auf den ++ - Operationen ausführen innerhalb einer array-index. Ich war nicht bewusst, das array-subskript-operator [ nahm Vorrang vor + + so jetzt muss ich überdenken umgehen. Bevor Sie dies tun, möchte ich sichergehen, dass diese Methode auch die Arbeit in den ersten Platz. Könnte jemand einen Blick auf meinen algo-code so weit und einige feed zurück? (Anmerkung: ich muss noch hinzufügen, in einigen code zu verfolgen, Wege zu vermeiden, irgendeine Art von Endlosschleife)

bool notSolved = true;
        int path = 0;
        row = 0;
        col = 0;

        rowStack.push(row);
        colStack.push(col);

        while (notSolved){

        //(from perspective of person looking at maze on screen)
        if (maze[row--][col] == 0){//if you can go up, go up
        rowStack.push(row);
        colStack.push(col);
        path++;
        }
        else if (maze[row][col++] == 0){//else if you can go right, go right
        rowStack.push(row);
        colStack.push(col);
        path++;
        }
        else if (maze[row++][col] == 0){//else if you can go down, go down
        rowStack.push(row);
        colStack.push(col);
        path++;
        }
        else if (maze[row][col--] == 0){//else if you can go left, go left
        rowStack.push(row);
        colStack.push(col);
        path++;
        }

            if((maze[row][col] == 0) && (row == (size - 1))){//if we reached an exit
                cout << "Solution Path:" << endl;
                for (int i = 0; i < path; i++){
                    cout << "row:" << rowStack.top() << " col:" << colStack.top() << endl;
                    rowStack.pop();
                    colStack.pop();
                }
            notSolved = false;
            }
        }

Problem mit dem ausführen von [ vor ++:
Die Aufnahme einer Labyrinth-Pfad-Lösung mit einem Stapel

Jede Hilfe dankbar, vielen Dank!

  • Rekursion ist dein Freund auf diese ein.
  • Sie haben eine spezielle Frage?
  • Ich glaube nicht, dass Algorithmus ist besonders gut, zum Beispiel, wenn Sie laufen in der rechten Wand, während er in einer horizontalen tunnel, Sie hüpfen hin und her, von rechts nach Links für immer.
  • Suche zuerst der Breite besser funktioniert, auf Labyrinthe, so dass in diesem Fall eine Warteschlange könnte ein besserer "Freund" als Rekursion. Auch wenn Sie sich entscheiden, zu gehen, Tiefe-zuerst, könnten Sie besser dran mit einem stack und einer "while" - Schleife statt der Rekursion. Da der Suchraum wächst als N^2, die Gefahr, dass die Stapel in einen rekursiven Aufruf ganz real wird.
InformationsquelleAutor darko | 2011-11-30
Schreibe einen Kommentar