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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 24.02.2004, 20:06
Sh@man вне форума Посмотреть профиль Отправить личное сообщение для Sh@man Найти все сообщения от Sh@man
  № 1  
Sh@man
 
Аватар для Sh@man

Регистрация: Mar 2002
Сообщений: 840
Отправить сообщение для Sh@man с помощью AIM Отправить сообщение для Sh@man с помощью Skype™
Attention Теория графов

Я столкнулся с проблемой при реализации алгоритма Дейкстры (нахождения кратчайшего пути по графу) во Флеше. Проблема в построении самого графа.
Граф у меня задается во внешнем xml файле примерно так:
<root>
<uzel1>
<uzel2 n="2" l="1"/>
<uzel4 n="4" l="3"/>
<uzel8 n="8" l="4"/>
</uzel1>

<uzel2>
<uzel1 n="1" l="1"/>
<uzel3 n="3" l="2"/>
<uzel4 n="4" l="2"/>
<uzel5 n="5" l="6"/>
</uzel2>

<uzel3>
<uzel2 n="2" l="2"/>
<uzel5 n="5" l="3"/>
<uzel6 n="6" l="4"/>
</uzel3>
....
</root>
Где:
- количество дочерних узлов
(<uzel1 n="1" l="1"/><uzel3 n="3" l="2"/>...) - это количество вершин графа, с которыми связана данная (например <uzel3>)
- атрибут "n" каждого дочернего узла - это номер вершины, с которой связан родительский узел ,
- атрибут "l" - это вес, или, скажем , расстояние от родительского узла до дочернего с данным атрибутом.

Из этой xml я получаю матрицу весов и 3 массива для реализации алгоритма. И по этим массивам и матрице надо сделать визуальное представление графа, где размерность матрицы = количеству узлов, а => количеству дубликатов отдельного MovieClip'a - узла графа.
С дублированием проблем нет, но как соединить каждую вершину графа <uzel[i] > дугой с другими вершинами, связь с которыми определена для данной.
Я предполагаю, что нужна функция для построения линий (и она в принципе есть). Но в какой цикл загонять ее выполнение для каждого узла графа - вот это проблема.
Далее привожу кусок кода, в который я полагаю надо вставить реализацию функции соединения вершин графа.
Может кто поможет разобраться с этой проблемой?

function MatrixConstructor(sourcexml) {
trace("MATRIX CONSTRUCTOR STARTED >>");
var src_xml = new XML();
src_xml = sourcexml;
var razmernost = getNumOfChilds(src_xml.firstChild);
trace("Matrix razmernost="+razmernost);
_root.matrix = new Array(10);
for (i=0; i<razmernost; i++) {
_root.matrix[i] = new Array();
}
for (x=0; x<razmernost; x++){
for(y=0;y<razmernost;y++){
_root.matrix[x][y] = Number.POSITIVE_INFINITY;
}
}
for (rowIndex=0;rowIndex<razmernost;rowIndex++){
var numOfChlds =getNumOfChilds(src_xml.firstChild.childNodes[rowIndex]);
trace("numOfChlds="+numOfChlds);
duplicateMovieClip(_root.node_mc, "node_mc"+(rowIndex+1), 110+rowIndex);
_root["node_mc"+(rowIndex+1)]._x = Math.random()*400;
_root["node_mc"+(rowIndex+1)]._y = Math.random()*300;
_root["node_mc"+(rowIndex+1)].numtxt = rowIndex+1;
_root["node_mc"+(rowIndex+1)].onPress = function () {
startDrag(this,false,0,0,540,390);
}
_root["node_mc"+(rowIndex+1)].onRelease = function () {
this.stopDrag();
}
for(colIndex=0;colIndex<numOfChlds;colIndex++){
nValue=getAttributeN(src_xml.firstChild.childNodes[rowIndex].childNodes[colIndex]);
lValue = getAttributeL(src_xml.firstChild.childNodes[rowIndex].childNodes[colIndex]);
trace("lValue="+lValue+" "+ "nValue="+nValue);
_root.matrix[rowIndex][nValue-1] = lValue;
}

}
}


Последний раз редактировалось Sh@man; 24.02.2004 в 20:09.
Создать новую тему   Часовой пояс GMT +4, время: 18:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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