![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jun 2011
Сообщений: 21
|
Есть граф. Если из одной вершины можно попасть в другую,то в матрице смежности 1, если нельзя или же элемент [i][i] то 0.
Функция : 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. |
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Очередная жесть. Кто писал эту функцию?
Где хоть один комментарий? О каких путях идет речь? Откуда в нее передаются данные? Я сильно удивлюсь, если кто-то тут ответит на этот вопрос при таком раскладе. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 21
|
Добавил комментарии.
Функцию писал я. Цитата:
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Какая изначально задача решается?
Кстати, не знаю, что там за граф, но в графе с циклом длина максимального пути стремится к бесконечности. |
|
|||||
|
Modus ponens
|
Проблема с восприятием такого кода в том, что вы используете непонятные названия для переменных / очень неспецифические типы. Кроме того, есть вещи, которые, хоть и будут работать, их никто не делает, т.как они бессмысленны, например сравнивать булевые значения с переменными булевого типа - if (variable == true) - бессмысленное выражение, т.как достаточно было if (variable). Кроме того, существует традиция, согласно которой инфиксные опереаторы обрамляюстся пробелами с двух сторон, а префиксный или постфиксные - нет. Это значит, что -i или i++ нужно писать слитно, а i == j нужно писать раздельно. Это не ошибка, но заставляет читающего "спотыкаться".
К сожалению я недостаточно знаком с графами, чтобы что-то посоветовать по сути вопроса.
__________________
Hell is the possibility of sanity |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Это NP-полная задача. Т.е. перебор (что долго), либо эвристики или что-то подобное (что не гарантирует максимальности).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 21
|
Вобщем так: я пишу игру точки,думаю все знают,что это такое. И для обвода точек, мне и нужно находить этот наидлинейший путь/цикл.
Я пытался использовать разные методы для графов..не очень получается,по идее надо написать рекурсивную функцию.Кто-нибудь может помочь.Исходные данные для функции это матрица смежности. |
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
хм... можете посмотреть так называемый "жадный алгоритм" может он и сойдет.
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
берём астар и ставим отрицательные веса.
__________________
Отряд Котовскага |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Если те точки, в которые я играл, то нужна наибольшая площадь, а не путь.
Я бы сделал так: охватываем прямоугольником, который затем скукоживаем, пока не получим подходящую охваченную область (когда все точки периметра - наши - это она). Довольно муторно, но вроде реализуемо. Или (по идее легче) - берём самую верхнюю точку и обходим из неё область по часовой стрелке. Если по завершению обхода отбросить висячие концы, то должно выйти типа того, что надо. Если не выходит, то выкидываем из рассмотрения пройденные точки и назначаем новую верхнюю точку.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 10.08.2011 в 18:25. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|