anakedhippo Ответов: 2

Мне нужна помощь в реализации BFS в C для вывода найденного пути


У меня есть программа на языке Си, которая делает BFS для поиска вершины цели. Проблема в том, что он выплевывает все вершины, которые он посетил, а не только путь к цели. Я не могу полностью придумать решение для этого, не вызывая ошибки сегментации.

Предположим, что входной файл имеет следующий вид: https://pastebin.com/kmYK4k0t

Первая строка-это число вершин, в то время как другие строки перечисляют матрицу смежности.

Выход выходит как 1--7--3--2--6--5--9--8--10 при поиске 10, когда я просто хочу сохранить путь 1--7--9--10. Может ли кто-нибудь порекомендовать какие-то новые структуры данных, чтобы я мог изменить этот путь? То, что я пробовал, не работает.

Вот этот код:

https://pastebin.com/seYSXNiK

Есть какие-нибудь предложения по структурам данных, которые я могу использовать для сохранения пути?

Что я уже пробовал:

Я пробовал реализовать очередь, но это просто сегментирует мою программу. Я не знаю, куда идти дальше.

2 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
Я пробовал реализовать очередь, но это просто сегментирует мою программу. Я не знаю, куда идти дальше.

Если вы получаете ошибку сегментации, это почти наверняка означает, что ваши указатели "плохие".
Какой указатель? Не знаю - мы понятия не имеем, какой код вы написали! :смеяться:

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

Отладчик позволит вам остановить ваш код во время его выполнения, чтобы вы могли посмотреть на содержимое переменных и / или памяти; запустить ваш код строка за строкой, чтобы увидеть, что происходит (так называемый "одиночный шаг"); даже изменить переменные, если вы думаете, что они неверны.

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

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
1

KarstenK

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

Используйте некоторые IDE, такие как Visual Studio и ее выдающиеся функции отладки.