Mit BFS-Algorithmus, um den kürzesten Weg zu finden

std::list <int> q;
std::vector<bool> visited(cols + 1);
for(int i = 1; i <= cols; i++) visited[i] = false;
visited[x] = true;
if(!l[x].empty())
{
    for(std::list<int>::iterator i = l[x].begin(); i != l[x].end(); i++)
    {
        q.push_back(x); q.push_back(* i);
    }
    while(!q.empty())
    {
        y = q.back(); q.pop_back();
        x = q.back(); q.pop_back();
        if(!visited[y])
        {
            visited[y] = true;
            if(!l[y].empty())
            for(std::list<int>::iterator i = l[y].begin(); i != l[y].end(); i++)
            {
                if(!visited[*i])
                {q.push_back(y); q.push_back(* i);}
            }
            dfst[x].push_back(y);
            if(flag != 0) dfst[y].push_back(x);
        }
    }
}

Dies ist meine DFS-Algorithmus für das finden der Spannbaum in einem Graphen. Ich brauche, um zu konvertieren, um die BFS-Algorithmus zu finden, den kürzesten Pfad zwischen zwei Eckpunkten. Gut...wie kann ich dies tun? Ist der BFS-Algorithmus etwas ähnlich der obigen? Oder muss ich es schreiben von Anfang an?

l - Nachbarschaft-Liste
dfst - array holding spanning tree am Ende
x - starting vertex
y - Helfer variable

InformationsquelleAutor user2489034 | 2013-06-18

Schreibe einen Kommentar