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

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

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

Регистрация: Jun 2011
Сообщений: 21
По умолчанию Наидлиннейший путь в графе(ну или не самый короткий)

Есть граф. Если из одной вершины можно попасть в другую,то в матрице смежности 1, если нельзя или же элемент [i][i] то 0.


Функция :
Код AS3:
         public function maxWay2(d:Array,x:Number):Array{
 
                       //d-матрица смежности
                       //x-элемент который есть начало поиска замкнутого пути
 
			var i:int; //счетчик
			var j:int; //счетчик
			var l:int=-1; //счетчик
			var put:Array=new Array(); //туда будем добавлять номера элементов пути
			var end:Boolean=false; //переменная для проверки окончания поиска
 
 
			for(i=0;i<d.length;i++) //цикл по размерности матрицы смежности,т.е по кол-ву элементов в графе
			{
				if(d[x][i]==1) //если нашли связь с каким-то элементом то...
				{
					l++; //делаем l=0
					put[l]=i; //записываем этот элемент в путь
					i=d.length; //завершаем цикл по i
					j=-1; // делаем -1 чтобы инкриминировать в начале следующего цикла 
					while(end==false) 
					{
						j++;
 
						if(d[put[l]][j]==1 && provMas(put,j)==-1) //если находим элемент, с которым есть связь у предыдущего элемента добавленного в наш путь и он
                                                  // не содержится в пути то...
							{
								l++;							
								put[l]=j; //добавляем этот элемент в путь
								j=-1; //присваиваем -1 чтобы начать поиск уже для нового элемента
 
							}
							if(put[l]==x || j>=d.length) //критерии окончания поиска:если нашли замкнутый путь или если не нашли связь 
							{
								end=true;
							}
 
					}
				}
			}
 
			if(put[l]==x && l!=-1) //если получили замкнутый путь и вошли  в самый первый if то возвращаем путь
			{
				return put;
			}
			return[-1,-1];
 
		}
 
                public function provMas(a:Array,sE:Object):int {
			for(var i:int=0;i < a.length;i++)
			{
				if (a[i].toString()==sE.toString()) { 
					return i;
				}			
			}
			return -1;
		}
Она ищет неминимальный путь но не всегда максимальный.
как переделать функцию под максимальный путь?


Последний раз редактировалось Kaner; 15.07.2011 в 23:22.
Старый 15.07.2011, 23:08
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Очередная жесть. Кто писал эту функцию?
Где хоть один комментарий?
О каких путях идет речь?
Откуда в нее передаются данные?
Я сильно удивлюсь, если кто-то тут ответит на этот вопрос при таком раскладе.

Старый 15.07.2011, 23:19
Kaner вне форума Посмотреть профиль Отправить личное сообщение для Kaner Найти все сообщения от Kaner
  № 3  
Ответить с цитированием
Kaner

Регистрация: Jun 2011
Сообщений: 21
Добавил комментарии.
Функцию писал я.

Цитата:
О каких путях идет речь?
о замкнутых путях. В функцию я передаю х-это должно стать началом и концом замкнутого пути если он есть

Старый 16.07.2011, 10:51
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Какая изначально задача решается?
Кстати, не знаю, что там за граф, но в графе с циклом длина максимального пути стремится к бесконечности.

Старый 16.07.2011, 13:22
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Проблема с восприятием такого кода в том, что вы используете непонятные названия для переменных / очень неспецифические типы. Кроме того, есть вещи, которые, хоть и будут работать, их никто не делает, т.как они бессмысленны, например сравнивать булевые значения с переменными булевого типа - if (variable == true) - бессмысленное выражение, т.как достаточно было if (variable). Кроме того, существует традиция, согласно которой инфиксные опереаторы обрамляюстся пробелами с двух сторон, а префиксный или постфиксные - нет. Это значит, что -i или i++ нужно писать слитно, а i == j нужно писать раздельно. Это не ошибка, но заставляет читающего "спотыкаться".
К сожалению я недостаточно знаком с графами, чтобы что-то посоветовать по сути вопроса.
__________________
Hell is the possibility of sanity

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

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

Старый 10.08.2011, 17:27
Kaner вне форума Посмотреть профиль Отправить личное сообщение для Kaner Найти все сообщения от Kaner
  № 7  
Ответить с цитированием
Kaner

Регистрация: Jun 2011
Сообщений: 21
Вобщем так: я пишу игру точки,думаю все знают,что это такое. И для обвода точек, мне и нужно находить этот наидлинейший путь/цикл.
Я пытался использовать разные методы для графов..не очень получается,по идее надо написать рекурсивную функцию.Кто-нибудь может помочь.Исходные данные для функции это матрица смежности.

Старый 10.08.2011, 17:57
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 8  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
хм... можете посмотреть так называемый "жадный алгоритм" может он и сойдет.

Старый 10.08.2011, 18:11
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
берём астар и ставим отрицательные веса.
__________________
Отряд Котовскага

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

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


Последний раз редактировалось -De-; 10.08.2011 в 18:25.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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