Вторник, 07.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Лабиринт
N-E-O-NДата: Четверг, 08.11.2007, 03:42 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 6
Репутация: 2
Замечания: 0%
Статус: Offline
Вобщем попалась мне така задача. Имеется матрица, её елементы это либо "1" либо "0". Это своеобразный лабиринт. "1" это пустота(проход) а "0"- это стена. Вход в лабиринт это ячейка (1,1) а выход (n,m) (угол матрици, противоположный входу). Нужно проверить есть ли выход из данного лабиринта или нет. Проходом щитаются те ячейки которые граничат так
|_|_| или

|_|
|_|
но не так
|_|
__|_|
Вот кажется всё сказал...Масив может быть заполнен как вручную так и рандомом....

Сообщение отредактировал N-E-O-N - Четверг, 08.11.2007, 03:59
 
PavelДата: Четверг, 08.11.2007, 08:26 | Сообщение # 2
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Это интересно. Но сразу хотелось бы сказать, что рандомом врятли что-то хорошее получиться. Очевидна также рекурсия. Сегодня подумаю.
 
SeqularДата: Четверг, 08.11.2007, 21:31 | Сообщение # 3
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
N-E-O-N, Я вот кое-что придумал, кстати. Рекурсивный вариант. Не слишком сложный, но, возможно, не самый оптимальный.

Процедура получения соседей клетки (по прямым). Если координаты соседа равены "n,m", то говорим, что выход из лабиринта есть. Эту процедуру повторяем рекурсивно для ВСЕХ соседей. Чтобы не зависнуть, придется зачеркивать уже обработанные клетки (например писать "2").. Так постепенно располземся. В конце возможно 2 варианта:

1) Закончились все свободные соседние клетки (с "1"). Тогда пишем, что выхода нет.
2) Одной из соседний клеток стала клетка с координатами n,m. Тогда пишем, что выход есть.

Как считаешь, такой вариант устроит?


Поддерживаю также проект сообщество молодых сисадминов
 
N-E-O-NДата: Пятница, 09.11.2007, 02:46 | Сообщение # 4
Новичок
Группа: Пользователи
Сообщений: 6
Репутация: 2
Замечания: 0%
Статус: Offline
Seqular, да, вполне устроит. В принципе матрицу можна и вручную ввести или считать с файла..(думаю не существенно). Главное тут сам алгоритм выявления соседних клеток.А метод твой интересный. Дерзай up

Добавлено (08.11.2007, 19:46)
---------------------------------------------
Pahan, shy Возможно с рандомом я погарячился... Я думаю принцип получения матрици не существен... Тут важно узнать есть ли выход smile

 
SeqularДата: Пятница, 09.11.2007, 06:32 | Сообщение # 5
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
N-E-O-N, Эммм... :-)) Мне дерзать?... Алгоритм в принципе расписал.

Процедура (клетка).
Если вокруг клетки есть поле n,m то вывести, что выход есть.
Если вокруг клетки есть поле "не стена", то вызвать эту процедуру для каждой свободной соседней клетки, не равной "X".
Текущую клетку сделать "Х", чтобы не зациклиться.
Конец.

Определение соседей:

Пусть текущая клетка равна a[i,j].
Соседи ее:
a[i-1,j]
a[i,j-1]
a[i+1,j]
a[i,j+1]

Если какая-то из них - "1", то вызывай процедуру для этой клетки.

Я хочу просто чтобы ты сам пришел к решению, тогда опыт получишь больший =) На крайний случай мы поможем тебе ее решить. В плане самого решения. Думаю, ты довольно способный, чтобы запрограммировать эту процедуру. Главное не забывать "метить" обработанные клетки, чтобы не гонять по ним постоянно (зависнет)


Поддерживаю также проект сообщество молодых сисадминов
 
N-E-O-NДата: Суббота, 10.11.2007, 02:10 | Сообщение # 6
Новичок
Группа: Пользователи
Сообщений: 6
Репутация: 2
Замечания: 0%
Статус: Offline
Seqular, за процедуру огромное спасибо. Буду пытаться делать smile Если уж ничо не выйдет то опять загляну сюда.)

Сообщение отредактировал N-E-O-N - Суббота, 10.11.2007, 02:29
 
SeqularДата: Суббота, 10.11.2007, 08:23 | Сообщение # 7
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
N-E-O-N, Заходи конечно! Если что - пиши. Попробуем код вместе накарябать =)

Поддерживаю также проект сообщество молодых сисадминов
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;