алгоритмы DFS использует очередь? - PullRequest
3 голосов
/ 29 октября 2011

я видел в интернете следующий алгоритм DFS

#include<iostream>
#include<queue>
#define MAX 100

using namespace std;

queue<int> myQueue;
int G[MAX][MAX];
int visit[MAX];
int V, E;


void dfs(int s) {
     int i, j, node;
     memset(visit, 0, sizeof(visit));
     myQueue.push(s);

     while(!myQueue.empty())
     {
          node = myQueue.front();
          myQueue.pop();
          if(visit[node]) continue;
          visit[node] = 1;
          cout << node << " ";

          for(i=0; i<V; i++)
               if(G[i][node]) myQueue.push(i);
          for(j=0; j<V; j++)
               if(G[node][j]) myQueue.push(j);     
     }

}

int main() {
    memset(visit, 0, sizeof(visit));
    dfs(0);
    return 0;
}

мой вопрос в том, что он использует очередь вместо стека, так ли это правильно? Также, когда я должен войти в график, он должен быть похож на соседнюю матрицуПомогите, пожалуйста, этот алгоритм использует значения по умолчанию, так как я могу его изменить?

1 Ответ

5 голосов
/ 29 октября 2011

Интересно.Я нашел код, на который вы ссылаетесь http://www.koders.com/cpp/fid1107E4F79ED191B482853E3206A2F13FC77B4310.aspx.

Конечно, он использует класс queue из стандартной библиотеки C ++ и, таким образом, реализует в ширинуалгоритм поиска .Использование C ++ стека должно дать вам поиск в глубину, который вы хотите.

Показывает, что вы не можете доверять всему, что видите в Интернете (возможно, даже включая этот ответ).: -)

Что касается вашего второго вопроса, этот размещенный код действительно использует матрицу смежности.Фактически, вы даже можете быть более точным и сказать, проверяя код, что он реализует ненаправленный граф без параллельных ребер .

ADDENDUM

Код в действии, показывающий, что это BFS: http://ideone.com/mLl23

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...