Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.01.2012, 19:25
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 1  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
По умолчанию Как найти точку в лабиринте, самую отдалённую от данной?

Недавно создавал тему по генерации лабиринта. С этим вроде разобрался. Теперь волнует вопрос нахождения самой отдалённой точки от данной. Пусть данная точка будет стартом, а самая отдалённая от неё будет финишем. Вопрос как найти эту самую удалённую точку?
В лабиринте есть только один главный проход, все остальные являются тупиковыми. Зацикливаний в лабиринте нет. Лабиринт генерируется алгоритмом depth-first search.

Старый 05.01.2012, 19:36
Jewelz вне форума Посмотреть профиль Отправить личное сообщение для Jewelz Найти все сообщения от Jewelz
  № 2  
Ответить с цитированием
Jewelz
 
Аватар для Jewelz

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
что значит "как найти"?
вы сами не знаете где сгенерировали выход?
или у вас по лабиритну ходит бот и ему надо дойти до точки?
__________________
low +

Старый 05.01.2012, 19:40
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 3  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Волной от данной точки по проходимым. Все клетки, которые накроет последняя волна находятся на самом большом удалении.

Старый 05.01.2012, 20:12
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 4  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Jewelz, в том то и дело, что лабиринт замкнутый и не имеет ни входа, ни выхода. Это как прямоугольник, изрытый проходами. Причём, как я уже сказал, существует только один главный проход, остальные ветвятся от него и являются тупиковыми.
Вот иллюстрация того, как у меня генерируется лабиринт: http://en.wikipedia.org/wiki/File:MAZE_30x20_DFS.ogv


Rzer, можно поподробней? Что за волна? Может где-то про это можно почитать?


Последний раз редактировалось Parez; 05.01.2012 в 20:28.
Старый 05.01.2012, 21:11
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Вода, заливаемая в начало лабиринта равномерно растекается - такая идея.
http://ru.wikipedia.org/wiki/%D0%92%...B8%D1%82%D0%BC
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 06.01.2012, 00:10
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 6  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Попробовал организовать волновой алгоритм, но получилось что-то странное. В большинстве случаях "самая дальняя" точка находится в одной-двух клетках от данной.
Вот код:
Код AS3:
function waveSearch(xs:int,ys:int):void
{
	trace(xs+" "+ys);
	passed++;
	waveObjMatrix[ys][xs].passed = true;
	if(passed < total-1)
	{
		if(ys+1 < waveObjMatrix.length)
		{
			if(!waveObjMatrix[ys+1][xs].passed && !waveObjMatrix[ys+1][xs].wall)
			{
				waveSearch(xs, ys+1);
			}
		}
		if(ys-1 >= 0)
		{
			if(!waveObjMatrix[ys-1][xs].passed && !waveObjMatrix[ys-1][xs].wall)
			{
				waveSearch(xs, ys-1);
			}
		}
		if(xs+1 < waveObjMatrix[0].length)
		{
			if(!waveObjMatrix[ys][xs+1].passed && !waveObjMatrix[ys][xs+1].wall)
			{
				waveSearch(xs+1, ys);
			}
		}
		if(xs-1 >= 0)
		{
			if(!waveObjMatrix[ys][xs-1].passed && !waveObjMatrix[ys][xs-1].wall)
			{
				waveSearch(xs-1, ys);
			}
		}
	}
	else
	{
		trace("xs = "+xs+" , "+"ys = "+ys);
	}
}
Суть алгоритма: в начале xs и ys - координаты старта. Дальше рекурсивно точки "растекаются" по всем направлениям (если в клетке по данному направлению нет стены, и она ранее не была посещена). Соответственно, по моей задумке, когда алгоритм закончит работу (когда будут пройдены все пустые клетки), переменные xs и ys будут равны координатам самой удалённой клетки от стартовой...
Что здесь может быть неправильно?

Старый 06.01.2012, 00:59
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Это не волновой алгоритм. У вас поиск в глубину, а не в ширину. Неравномерно вода течет.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 06.01.2012 в 01:03.
Старый 06.01.2012, 16:24
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 8  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Разве? По-моему, она как-раз течёт, равномерно заполняя собой все проходы... Я старался следовать алгоритму Ли: http://ru.wikipedia.org/wiki/%D0%90%...C_%D0%9B%D0%B8.
Не можете указать в чём ошибка, или поподробнее объяснить, что следует делать?

Старый 06.01.2012, 17:31
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Точно. Это совершенно не волна. Сделать волну. Полно описаний в инете и алгоритма Ли (да, лучше его ковырять, волна более общий алгоритм) и волны. Но код выше на них не похож. Можно вместо трейса загонять в массив пройденные клетки и выводить их потом по одной за кадр - увидите, как у вас вода течёт. Даже не из источника, а к источнику скорее)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 06.01.2012, 18:26
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 10  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
В приложении моя старая реализация.
Во многом плоха, но работает.

p.s. Оказалось, что не так уж и плоха. Обновил, стала еще побыстрее.
Вложения
Тип файла: rar wave.rar (54.5 Кб, 20 просмотров)
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 07.01.2012 в 06:15.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:36.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.