|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.07.2011, 23:22 | #1 |
Форумчанин
Регистрация: 17.01.2010
Сообщений: 277
|
Delphi. Сапер. Алгоритмы.
Здравствуйте, написал свой вариант сапера: http://files.mail.ru/VUBKNS
Как то пробовал давно его сделать, но не хватило толку придумать, как открыть пустые поля рядом с пустой клеткой, по которой щелкнул. Сейчас почему то быстро придумал алгоритм, но достаточно тупой (если по коду не понятно, могу объяснить). Хотелось бы узнать какие вообще существуют алгоритмы для этого. Слышал что можно через рекурсию, но даже не пытался, ибо не силен в ней. Еще вопрос, почему при указании размеров окна больше чем 31 на 31 - глюк, так же глюк происходит, если количество мин очень близко к количеству клеток, но это понятно(думаю опять же из-за моего тупого алгоритма), вообщем вот все что хотел узнать. Если будете выкладывать свои алго, то немного объясню про то, как мой вариант устроен: Есть поле(матрица (pole[i,j])) из символов: '0' - пустая клетка, '1'..'8' - кол-во мин, '9' - мина. Есть еще две логические матрицы (open,flags) - соответственно для статусов "открыта ли клетка" и "стоит ли флажок" Вообщем это было моим фундаментом, весь остальной код для интерактивности и графики. |
04.07.2011, 23:26 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
это типичный обход дерева, рекурсией удобней всего, имхо
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
05.07.2011, 02:55 | #3 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
А почему бы к форуму не прикрепить исходник чтобы не потерялся?
|
05.07.2011, 14:00 | #4 |
Форумчанин
Регистрация: 17.01.2010
Сообщений: 277
|
А вы не могли бы рассказать поподробнее про дерево и рекурсию на данном примере??
Кстати если кому то нужно, могу написать все комментарии к коду. |
05.07.2011, 14:50 | #5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Ну вот у вас есть поле и клетка, с которой начинается обход.
Рекурсивная процедура будет принимать как параметр координаты клетки. Она будет просматривать 8 соседей, и для каждого пустого соседа вызывать саму себя с координатами соседа. Типа такого: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 05.07.2011 в 14:57. |
05.07.2011, 21:50 | #6 |
Форумчанин
Регистрация: 17.01.2010
Сообщений: 277
|
Ммм я с рекурсией плохо знаком.. Как из нее выйти??
|
06.07.2011, 08:31 | #7 | |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 684
|
Выходом из рекурсии является первое условие:
Цитата:
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой? |
|
06.07.2011, 19:39 | #8 |
Форумчанин
Регистрация: 17.01.2010
Сообщений: 277
|
Так я вот и не понимаю что значит "выходим"=)
|
07.07.2011, 00:11 | #9 |
Пользователь
Регистрация: 15.05.2011
Сообщений: 14
|
Ну, в C/C++/C#/Java и т.п это return.
В Pascal - Exit. Просто выход из функции (процедуры). Для функции возможно также передать значение. |
05.03.2013, 13:59 | #10 |
Регистрация: 28.11.2012
Сообщений: 4
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача из раздела Комбинаторные алгоритмы и алгоритмы на гра-фах в Паскале | Klik_1602 | Помощь студентам | 1 | 04.01.2011 01:18 |
Алгоритмы с ветвлениями.(Delphi) | flyfry | Помощь студентам | 2 | 29.03.2010 14:42 |
Delphi 7. Линейные алгоритмы. | Юрий2009 | Помощь студентам | 1 | 30.04.2009 17:51 |
Delphi 7. Линейные алгоритмы. | Юрий2009 | Помощь студентам | 3 | 28.04.2009 18:52 |