Tiefe-Zuerst-Suche zum finden von kürzesten Pfad?

Ich weiß, diese erfolgt in der Regel mit der Breite zum ersten mal, aber wir sind aufgefordert, es zu tun mit den beiden, die ich bereits erreicht Breite zum ersten mal....

Ich fühle mich wie das ist ein ziemlich typisches Beispiel für die Verwendung eines depth-first-Suche, also ich hatte gehofft, ich könnte hier etwas Hilfe... ich bin versucht zu finden, den kürzesten Weg durch ein Labyrinth mit Tiefe-zuerst-Suche, aber wie der jetzt ich kann nicht umbrochen, mein Kopf herum, wie genau es zu tun. Das ist mein code bisher:

void maze::findPathRecursive(graph &g, int position, int goal) {
    if (position == goal) {
        isPath = true; //returns true if there is a path to the goal
        correctPath.push_back(position); //the path to the goal
    } else {
        g.mark(position);
        g.visit(position);

        //gets all the neighbors of the current position
        vector<int> neighbors = getNeighbors(position, g);

        while (!neighbors.empty()) {
            int n = neighbors.back();
            neighbors.pop_back();

            if (!g.isVisited(n)) {
                findPathRecursive(g, n, goal);
            } 

            if (isPath) {
                correctPath.push_back(position);
                break;
            } 
        } 
    } 
} 

Gerade jetzt, was dies bedeutet, ist der erste Weg zum Ziel und bricht von dort aus. Ich weiß, ich werde zu müssen, um loszuwerden, die Pause, und ich habe versucht, einen anderen Vektor zu speichern, der kürzeste Weg, und vergleichen Sie die Längen zwischen ihm und dem früheren kürzeste, aber es ging nicht, weil ich fühle mich wie ich brauche, um unvisit Knoten an einem gewissen Punkt, kann aber nicht herausfinden, wie genau es hier tun.

Jede Hilfe wird sehr geschätzt!!

g ist ein graph, der durch die Art und Weise enthält das Labyrinth.

  • Können Sie bestätigen, wenn Ihr graph ist azyklisch?
  • nun, wie es jetzt funktioniert ist, dass selbst wenn es einen großen Kreis, der erste Knoten werden als "besucht" markiert und nicht in der Lage wäre, die besucht werden, also wieder in eine Art, ja es ist
  • Mögliche Duplikate von DFS-kürzesten Pfad von a maze in C++
InformationsquelleAutor seanscal | 2014-03-28
Schreibe einen Kommentar