Падение после некоторой итерации пользовательского дерева C++

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

while(!(tree->s==final))
{ 
    //copy it in tree   

    expand_node(tree);
    //check if in open then add if not
    it++;
}      
print_s(tree->s);

PS: я все скомпилировал с

g++ -Wall -Wextra -std=c++11 main.cpp

1 ответ

Внутри вашего диапазона, основанного на циклах, вы добавляете в список:

for(auto v : open)
    if(!(v.s==tree->childs[i].s))
        open.push_back(tree->childs[i]);

Это приведет к увеличению списка и запуску другой итерации, пока вся память на вашем компьютере не будет исчерпана. Ваша машина, вероятно, не зависает, просто становится очень медленной, в то время как ваша операционная система подменяет память на диск.

Другие вопросы по тегам