|
|
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Всех, приветствую! Сейчас стоит задача вывести циклический ориентированный граф на экран. Кто-нибудь сталкивался с подобной задачей и каким образом её решали? Посоветуйте может ссылку, где можно в теории почитать про возможный вариант решения. Сложность заключается именно в том, что он циклический. С ациклическим сложностей нет)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 11:18 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, При такой формулировке, вывод вершин по окружности решает задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 11:22 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Почитай как в graphviz'е сделано http://www.graphviz.org/Theory.php В его man'ах есть тоже ссылки на источники. Там вообще по барабану циклический или нет граф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 11:33 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду, что это не просто граф, где один замкнутый цикл, а только часть графа замкнута, а часть не замкнута. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 11:33 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirstЯ имел ввиду, что это не просто граф, где один замкнутый цикл, а только часть графа замкнута, а часть не замкнута.А какая разница? Если расположить вершины по окружности, а дуги рисовать хордами, вывести на экран (так, чтобы дуги не сливались и не пересекали вершины) можно любой граф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 11:38 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Abstraction, Может быть несколько замкнутых циклов с произвольными связями между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 11:45 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, Да. Понимаю. Чем не устраивает предложенное решение? Оно позволяет отрисовать даже полносвязный граф, вообще-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 12:02 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, таки граф планарный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 12:03 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Изопропил, Граф не планарный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 12:44 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, Если граф не планарен, то его невозможно нарисовать без самопересечений - по сути, это и есть определение планарности=) Получается, выше Вам правильно советуют - рисовать по окружности, вернее, расположить вершины как правильный n-угольник,а потом внутренности соединять хордами. Просто я думал, что граф планарен, тогда есть довольно сложные алгоритмы укладки графа на плоскости, надо гуглить=) А Вашем случае этот алгоритм все равно не спасет, поэтому зачем платить больше и иписать что-то сложное? =) Я когда-то граф выводил на экран, я делал через полярные координаты. Пусть n - кол-во вершин. Тогда step = 360/n - это величина угла одной "створки", то есть угла, опирающегося на грань. Радиус R выберете сами, пусть будет Screen.Width/2. Тогда координаты всех вершин for(int i=1;i<=n;i++){ I-th_point_X = R*cos( step*(i-1) ); I-th_point_Y = R*sin( step*(i-1) ); } Потом, если какие-то соединены, рисуем методом drawLine класса Graphics хорду. Естественно, для рисование на экране надо с помощью банальной пропорции перевести посчитанные координаты из декартовых в экранные - в компе-то ведь начало координат - это центр экрана(не обязательно, но самый удобный вариант) и ось У обычно вниз направлена). Тогда перевдим декартовы в компьютерные так R - width/2 some_coord_you_need_to_convert - и дальше находим x по пропорции=)Находим его, что рисовать фактически, то есть дл я функции draw_line. которая есть и в C# и в Java. Насчет перевода я мог немного ошибиться, сейчас думать лень, я по памяти пишу, я как-то так делал, все работало, думаю Вы разберетесь, так несложно=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 14:08 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
BaurzhanS, Да у меня и не стоит задача нарисовать этот граф именно как не пересекающийся. Достаточно просто его вывести. Среди пожеланий к построению - это наглядность представления. Так как граф описывает некий процесс, то более наглядно было бы расположить узлы графа последовательно. В связи с этим не подходим расположение узлов графа по окружности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:12 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, Ну, есть вариант расположить узлы графа на прямой, в последовательности, определяемой процессом; рёбра, не соединяющие два последовательных узла, рисовать П-образными перемычками (кибернетическое изображение). Если таких рёбер не слишком много, смотреться будет нормально и читабельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:24 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Интересен алгорит выводящий граф в наиболее презентабельном виде. Желательно снизить число пересечений и длину связей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:28 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Было элегантное итерационное решение в виде Java-applet которое "распланаривало" граф на уровне минимизации внутренних напряжений в рёбрах и вершинах. Отсутствие пересечений там не гарантировалось но было более-менее преемлемо для просмотра человеком на экране. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:29 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Abstraction, Вот когда появляются циклические графы, становится не понятно как располагать узлы, чтобы всё это нормально нарисовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:31 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, Тогда определитесь - Вам "наглядно", "с минимальной длиной связей" или "с минимальным количеством пересечений"? Я предлагаю вариант, который при небольшом числе "скачущих" через течение процесса рёбер будет нормально читаться, причём нотация имеет шанс оказаться уже знакомой читающему. Если нужно минимизировать длину связей и количество пересечений, можно пытаться выделять компоненты высокой связности и изображать их вершины рядом. "Порядок процесса" при этом будет изображён непредсказуемыми зигзагами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:34 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Не забывайте про полно-связные графы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:40 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
mayton, А можно посмотреть вариант реализации или на словах описать его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:47 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Описание и исходники найти не могу. На словах - элементы графа рёбра и вершины наделяются "отрицательной гравитацией". Тоесть задаётся уравнение движения вершин и рёбер и запускается процесс симуляции этой системы до тех пор пока не проёдет некоторое количество эпох либо пока система не войдет в какое-то стационарное состояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 16:00 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, если это ПРОЦЕСС, то скорее всего нет там никаких циклов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 22:07 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
ViPRos, Сталкнулся с тем, что циклы есть. Отражают что-то типа обратной связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 10:18 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
SergeyFirst, опиши ка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 10:29 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
Процессы происходят во времени в прошлое связей нет пока что ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 10:30 |
|
||
|
Алгоритм вывода циклического графа
|
|||
|---|---|---|---|
|
#18+
ViPRos, Графф описывает процесс некоторого расчёта. Каждый узел функцию расчёта и результат расчёта. Для проведения расчёта необходимы результаты расчёта других узлов. Соответственно появляются циклические связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 10:43 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37365365&tid=1342821]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 478ms |

| 0 / 0 |
