|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
В программе не до конца выполняется цикл while25.10.2025, 19:49. Показов 1400. Ответов 13
Метки нет (Все метки)
У меня программа ищет выход из лабиринта. На входе текстовый файл, в котором 0-проход, 1-стена, 2-вход, 3-выход.
Нужно получить выходной файл, в котором 1- путь, остальное-0. У меня для одного лабиринта выполнилась программа, а для другого (там, где есть тупик) нет. Хотя, я прописала, что делать в этом случае, но программа почему-то не заходит в этот if. Подскажите, как исправить. Самое странное, что в цикле внешнем while программа доходит до проблемной точки, а дальше не идет, ничего не печатает. Мне было бы понятно, если бы зациклилась. А такое поведение не понятно. Я код в виде архива прикрепила. Подскажете?
0
|
|
| 25.10.2025, 19:49 | |
|
Ответы с готовыми решениями:
13
do while - почему выполняется цикл, даже если условие истина? Неправильно выполняется цикл do while
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||
| 25.10.2025, 20:47 | ||||||
|
Условие такое в цикле.
Что если одна из координат совпадает с точкой выхода, цикл прерывается.
0
|
||||||
|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
| 25.10.2025, 21:34 [ТС] | |
|
Спасибо!
Это поправила, но теперь доходит до следующего тупика и начинает вся время двигаться назад, ко входу, а не к выходу. Что еще поправить? Где-то забыла статус сменить на passed? Во вложении поправленный главный файл.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 25.10.2025, 23:25 | |
|
Откуда же мне знать?
Я не знаю по каком алгоритму ищется выход в этой программе. Добавлено через 42 минуты Похоже на попытку поиска в ширину(ещё называют Волновым методом), только криво.
0
|
|
|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
| 26.10.2025, 01:14 [ТС] | |
|
Да, как-то так. Только не вижу, где опять ошибка. За свежим, внимательным взглядом обращаюсь.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 26.10.2025, 01:41 | ||
|
Просто написать заново без всех этих костылей.
0
|
||
|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
| 26.10.2025, 13:43 [ТС] | |
|
Что за костыли? Что так сильно не понравилось то???
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||||
| 26.10.2025, 14:40 | ||||||||
|
Да мне всё нравится.
Просто в коде поиска пути, нет законченной логики. И так же неоднозначностей. Поэтому править его можно бесконечно. Навскидку намешена логика поиска в глубину и поиска в ширину, что уже нехорошо. Есть множество разных состояний, исключительных, что приводит к ещё большей запутанности очень простой задачи. Почему идет назад? А почему нет? Клетка не всегда удаляется из вектора, как обработанная. И при след. цикле while, опять будет обрабатывать те же самые клетки. Нет проверки точки c(которая уже в списке на обработку) на passed.Из постановки задачи уже неоднозначность:
И в реализации/задумке поиска пути такая же ситуация.
0
|
||||||||
|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
| 26.10.2025, 14:52 [ТС] | |
|
Но это не совсем граф, чтобы был четко поиск в ширину. А так проверяю 4 соседние клетки (по диагонали сказано нельзя ходить). Стена (1)- не идем, по уже прошедшим тоже не идем (только чтобы из тупика выбраться), а если выбор из двух, то уж первую в векторе из 4-х, что не всегда удачно...
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 26.10.2025, 15:21 | ||
|
Каждая вершина адресуется координатами однозначно. Каждая связь вершины(точки (x,y)) однозначно определяется с другой точкой(связь есть только в случае одинаковой координаты x или y). Такую систему можно легко воспринимать как граф, что и успешно используется в алгоритме Ли. И что я успешно могу продемонстрировать сам, просто описав интерфейс графа над полем игры.
0
|
||
|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
| 27.10.2025, 10:56 [ТС] | |
|
У меня заработало
Добавлено через 1 минуту Там ошибка была в том, что перепутала размеры по х и у в функции проверки на то, что не вышли за границы лабиринта.
0
|
|
|
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
|
|
| 27.10.2025, 11:31 [ТС] | |
|
Правда во все тупики заходит, но благо возвращается на нужный путь, и еще топтаться на свободном пространстве любит
0
|
|
|
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,267
|
|
| 27.10.2025, 12:10 | |
|
Создаешь таблицу. 1 - стены, 2 - вход (старт), 3 - выход (финиш). Остальные нули.
- Ищешь клетку со входом (2), проверяешь соседние клетки - и если в них 0 - записываешь в них, ну скажем, 11. - Ищешь клетки с 11, проверяешь соседние, если в них 0 - записываешь 12 - И так далее, пока не дойдешь до выхода (3) - путь найден, или пока не возникнет такая ситуация, что не удастся поставить ни одной следующей цифры - путь не найден. Потом нужно найти реальный кратчайший путь от 3 к 2. Допустим, цифра 3 нашлась после 15, записываешь в ячейку 15 (например) 115. Находим вокруг 115 точку 14 - если их несколько, выбираешь первую попавшуюся или рэндомом. Записываешь в точку 14 - 114. И так далее до 111, которая и будет граничить с входом 2. Потом проходишь по таблице и вместо всех 2-х значных чисел возвращаешь нули. А оставшиеся 3-х значные 111, 112, 113, 114 и 115 и будут путем от входа 2 к выходу 3. Как то так.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 27.10.2025, 12:56 | ||||
|
alexu_007, это и есть Алгоритм Ли/Волновой метод/Волновая трассировка.
Добавлено через 6 минут X - это ширина(координата по горизонтали), Y - высота(по вертикали). Так устоялось по декартовой системе координат. Когда используешь переменные для массива, всегда используется наоборот. Что бы меньше путать, называть переменные для массива h и w(r/c, row/col), или аналогично.
0
|
||||
| 27.10.2025, 12:56 | |
|
Помогаю со студенческими работами здесь
14
что такое цикл while и Do-while Нужно переписать во вложенной л/р цикл while на do while и for Цикл while (обновлять while если имеется 2 обновляющих значения) Почему не работает цикл while для заполнения и do while для вывода массива? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|