Итеративный DFS для поиска каждого пути в лабиринте попадает в бесконечный цикл [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Итеративный DFS для поиска каждого пути в лабиринте попадает в бесконечный цикл [закрыто]

Сообщение Anonymous »

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

Код: Выделить всё

Stack stack;
stack.push(start);
start->visited = true;
while (!stack.isEmpty()) {
Block* curr = stack.peek();
if(curr == end){
paths[pathCount] = stack;
pathCount++;
stack.pop();
}
else{
bool valid = false;
for(int i = 0; i < curr->adjCount; i++){
if(!curr->adj[i].visited){
Block* next = &curr->adj[i];
valid = true;
for(int j = 0; j < next->adjCount; j++){
if(next->adj[j].visited){
valid = false;
break;
}
}
if(valid){
next->visited = true;
stack.push(next);
break;
}
}
}
if(!valid){
for(int i = 0; i < curr->adjCount; i++){
curr->adj[i].visited = false;
}
stack.pop();
}
}
}
Я пытался изменить его, но не смог понять, почему он выполняет бесконечный цикл.

Подробнее здесь: https://stackoverflow.com/questions/784 ... inite-loop
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»