Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.02.2017
Сообщений: 17

Алгоритм поиска в ширину, указатели, работа с памятью

10.02.2020, 20:07. Показов 717. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
При реализации поиска в ширину столкнулся с такой проблемой:
при нахождении искомого объекта, while - бесконечно циклится.

Дело в том, что почему-то в этот момент поле Node.parent указывает само на себя.

Что я делаю не так?


Функция поиска в ширину:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    
eDirection BFS()
    {
        MyPoint = map->GetHeadPointOfSnake(MySnake);
        list<int> visited; // список выражений (p.Y * map->width + p.X), с помощью которых мы проверяем была ли проверенна точка p, если была, то в данном списке найдется значение выражения.
        queue<Node> notVisited; //очередь из непосещенных узлов
        //Node startNode(MyPoint, nullptr, Up);
        notVisited.push(Node(MyPoint, nullptr, Up));//добавил стартовый нод в очередь
        visited.push_back(MyPoint.Y * map->width + MyPoint.X); // добавил стартовый нод в список посещенных
        while (!notVisited.empty())
        {
            Node currentNode = notVisited.front();
            notVisited.pop();
            if (map->ElementAt(currentNode.point) == APPLE) //найден искомый объект
            {
                eDirection move = currentNode.dir;
                do
                {
                    currentNode = *currentNode.parent;
                    move = currentNode.dir;
                } while (currentNode.parent!=nullptr);
                return move;
            }
            if (IsReacheble(&currentNode.point.AnalasyingPoint(Left)))
            {
                Point p  = currentNode.point.AnalasyingPoint(Left);
                if (!Contains(visited.begin(), visited.end(), (p.Y * map->width + p.X)))
                {
                    notVisited.push(Node(p, &currentNode, Left)); // возможно что указатель на текущий нод будет удаляться, т.к заканчивается зона видимости currentNode
                    visited.push_back(p.Y * map->width + p.X);
                }
            }
        }
    }
    }
    }
Класс Node:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Node
    {
    public:
        Point point;//сама точка
        Node* parent;// граф, из которого быстрее всего попасть в текущий граф
        eDirection dir;// направление, по которому можно попасть из графа parent;
        Node(Point point, Node* parent, eDirection dir)
        {
            this->point = point;
            this->parent = parent;
            this->dir = dir;
        }
    };
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2020, 20:07
Ответы с готовыми решениями:

Нужна книга, где рассматриваются работа с прерываниями, указатели, работа с памятью, ассемблерные вставки
Привет всем! Подскажите, пожалуйста, хорошую книгу по C (именно C, не C++). Интересует работа с прерываниями, указатели, работа с памятью,...

Алгоритм поиска в ширину
Нашел алгоритм &quot;поиска в ширину&quot; только на С#. Может кто-нибудь переписать его на С? Random rand = new Random(); Queue&lt;int&gt; q =...

Алгоритм поиска в ширину
Всем привет. Мне нужно реализовать этот алгоритм на java. Пожалуйста подскажите, что нужно делать? Какой тип данных использовать, как...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2020, 20:07
Помогаю со студенческими работами здесь

Алгоритм поиска в ширину
Вот тут нашел реализацию алгоритма поиска в ширину кратчайших расстояний в графе. По идее расстояния должны храниться в массиве d, но ответ...

Алгоритм поиска в ширину
Подскажите, пожалуйста, алгоритм поиска в ширину в неориентированном графе

Работа с динамической памятью через указатели.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Работа с динамической памятью через указатели. Загадочная ошибка.
Программа запускается и нормально исполняется, но в конце появляется ошибка. Мог бы кто подсказать в чем проблема? Пишу в Microsoft...

Работа с динамической памятью через указатели. Загадочная ошибка.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Есть такая задача: Создать массив из N целых чисел, N вводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru