Этот вопрос является результат странного поведения, которое я получаю из ДФСА обхода графа algorithm.i пытался реализовать DFS и вот мой код для него:обратных упорядоченного обход графа
#include<iostream>
#include<stack>
#include<vector>
#include<map>
using namespace std;
map<int,bool> discovered;
map< int , vector<int> > graph {
{1,{2,3}},
{2,{1,4,5}},
{3,{1}},
{4,{2}},
{5,{2}}
};
vector <int> visited;
void clear_graph(){
for(map<int,bool>:: iterator iter = discovered.begin(); iter != discovered.end(); iter++)
discovered[iter->first] = false;
}
void dfs(int start) {
int current;
int next;
unsigned int i;
stack <int> vertices;
discovered[start] = true;
vertices.push(start);
while (!vertices.empty()){
current = vertices.top();
visited.push_back(current);
vertices.pop();
for(i = 0 ; i<graph[current].size() ; i++){
next = graph[current][i];
if (!discovered[next]){
discovered[next] = true;
vertices.push(next);
}
}
}
}
int main() {
clear_graph();
int start = 1;
dfs(start);
vector<int> ::iterator vi;
for(vi=visited.begin(); vi!=visited.end();vi++)
cout<<*vi<<" ";
return 0;
}
Это это граф я рассматриваю:
выход на графике: 1->2->4->5->3
но выход я получаю: 1->3->2->5->4
Я могу заметить, что это также действительный обход DFS, но справа налево oredr, почему это так? если не так, какая часть моего кода я ошибаюсь? и этот множественный обход одного графика не приведет к неправильным результатам в случаях, когда требуется обход DFS?
При обработке 1 вы нажимаете 2 и 3 в стеке в указанном порядке. Затем вы продолжаете, выбирая 3 и т. Д. Кстати, ваше последнее предложение не имеет смысла. – ooga
@Barry жаль, что я новичок в этом, я думал, что, наконец, добавит изменения. моя вина :). как добавить изменения? –
@ooga я его отредактировал. это была опечатка –