![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Подскажите пожалуйста, как реализовать графический вывод на экран графа и дерева, по соответствующим массивам: двумерному (список смежности) и одномерному соответственно.
Я реализовал алгоритм ПВШ на графе, и теперь это всё нужно наглядно выводить на экран... С графикой на си++ не работал, поэтому Ваша помощь мне нужна, как никогда : ) |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата С графикой на си++ не работал, поэтому Ваша помощь мне нужна, как никогда В таком случае уточняй, что именно ты используешь: какой компилятор, какие графические библиотеки, какая ОС, в конце концов.А вообще, вывод графа на экран - это еще та "песня". С деревьями проще. Только не совсем понятно, как это у тебя дерево представлено одномерным массивом? Ты что, само дерево не создавал? |
Rocket |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
В таком случае уточняй, что именно ты используешь: какой компилятор, какие графические библиотеки, какая ОС, в конце концов. А вообще, вывод графа на экран - это еще та "песня". С деревьями проще. Только не совсем понятно, как это у тебя дерево представлено одномерным массивом? Ты что, само дерево не создавал? Компилятор у меня GCC (DEV C++ использую), ос Window Xp, библиотеки, наврено, все стандарные... Это представление наподобие, как в турнирной ортировке, к примеру, используется. Вот так: 378492 - массив, дерево должно выглядеть: 3 7 8 4 9 2 Число вершин в графе от 12 до 15. Как дерево строить, пиблизительно понятно, но опять же всё в графику упирается...а вот граф из матрицы смежностей- это жестоко. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Компилятор у меня GCC (DEV C++ использую), ос Window Xp, библиотеки, наврено, все стандарные... Хм... Ладно. Задам вопрос по-другому. У тебя приложение на данный момент какое? Консольное, или WinAPI-шное? Если хочешь, покажу как при помощи WinAPI нарисовать дерево (дополнительные библиотеки вроде того, что описано тут устанавливать не буду, не надо оно мне). Только ДЕРЕВО, а не массив, подразумевающий, что это дерево. Ибо из твоего массива мне, например, совсем непонятно, что и с чем на втором уровне связывается. 9 - это справа от семерки, или слева от 8-ки, к примеру.Создавай дерево (чтобы было однозначно понятно, что с чем связано) и его отображай, в этом я могу тебе помочь. Не хочешь - извини, ничем помочь не могу. С графом - у тебя тоже будет проблема. Или это получится ровные ряды кружков (узлов) и хаотично пересекающие друг друга ребра, или... Дипломы на этом пишут, отрисовать граф так, чтобы не было пересечения ребер... Ты что выбираешь? |
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Хм... Ладно. Задам вопрос по-другому. У тебя приложение на данный момент какое? Консольное, или WinAPI-шное? Если хочешь, покажу как при помощи WinAPI нарисовать дерево (дополнительные библиотеки вроде того, что описано тут устанавливать не буду, не надо оно мне). Только ДЕРЕВО, а не массив, подразумевающий, что это дерево. Ибо из твоего массива мне, например, совсем непонятно, что и с чем на втором уровне связывается. 9 - это справа от семерки, или слева от 8-ки, к примеру. Создавай дерево (чтобы было однозначно понятно, что с чем связано) и его отображай, в этом я могу тебе помочь. Не хочешь - извини, ничем помочь не могу. С графом - у тебя тоже будет проблема. Или это получится ровные ряды кружков (узлов) и хаотично пересекающие друг друга ребра, или... Дипломы на этом пишут, отрисовать граф так, чтобы не было пересечения ребер... Ты что выбираешь? Приложение у меня сейчас консольное. 9 справа от семерки (то есть 4 и 9 потомки 7, а 2 потомок 8)... Весь алгоритм ПВШ у меня основывается на работе с массивами, по этому конечный результат у меня тоже вот массив. Как теперь из него сделать дерево,я вообще не представляю. С графом я выбираю самый простой и наглядный вариант, наверно ряды кружков (ну или по кругу их можно расположить) и пересекающиеся ребра... P.S. Прикрепил исходную программу. Вобщем понял я свои заблуждения, касающиеся массива - действительно из такого представления нельзя восстановить дерево корректно. Теперь я буду также делать и для дерева матрицу смежностей, а задача построения графа и дерева вобщем сводится к одному типу рисунка... Сообщение отредактировано: Rocket - 4.04.2009 16:53 Прикрепленные файлы ![]() |
Rocket |
![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вот доработанная программа - дерево хранится в двумерном массиве, ввиде матрицы смежностей.
Как всё-таки это нарисовать?... задача сводится к выводу графа и дерева( выглядит как граф, в принципе, но четко со структой дерева,) из матрицы смежностей. Прикрепленные файлы ![]() |
Rocket |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Что-то обсуждение темы зашло в тупик... volvo, у тебя же были какие-то идеи?
От безысходности решил писать матрицы в файлы, а потом паскалевской программой их открывать и рисовать. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
У меня и сейчас есть идеи, но ты ж молчишь насчет того, устроит ли тебя WinAPI? А я устанавливать дополнительные библиотеки не собираюсь, не надо их мне... Другого пути (без установки доп. библиотек) рисовать с использованием С++, к сожалению, еще не придумали.
|
Rocket |
![]()
Сообщение
#9
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
У меня и сейчас есть идеи, но ты ж молчишь насчет того, устроит ли тебя WinAPI? А я устанавливать дополнительные библиотеки не собираюсь, не надо их мне... Другого пути (без установки доп. библиотек) рисовать с использованием С++, к сожалению, еще не придумали. А с помощью WinAPI граф и дерево, будут восстановлены из матриц? Добавлено через 12 мин. Вобщем, на чём будет основываться принцип построения с помощью WinAPI, и что для него нужно? |
Rocket |
![]()
Сообщение
#10
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Что-то дело не сдвигается с мертвой точки...походу придется переходить к плану Б)
volvo, что же всё-таки с тоей WinAPI-шной реализацией? |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Хм... Ну, сначала - ответ на предыдущий вопрос:
Цитата на чём будет основываться принцип построения с помощью WinAPI, и что для него нужно? Основываться будет на том же, на чем ты хочешь основывать рисование с использованием модуля Graph из Паскаля. Только вместо примитивов модуля Graph (Line, Circle, PutPixel и т.д.) будут использоваться графические примитивы WinAPI: MSDN -> Line and Curve Functions и MSDN -> Filled Shape FunctionsОтрисовывается на самом деле очень просто: тебе известно, сколько у тебя узлов в графе, так? вот и рисуешь столько кружков на экране. Я бы их расположил в вершинах правильного N-угольника, я когда-то показывал, как это делать, воспользуйся поиском. Заодно запоминаешь, в каких координатах расположена каждая вершина (простой массив структур). А потом уже по матрице смежности выясняешь, с какими вершинами связана первая - протягиваешь от первой к ним линии (ребра). Покажи, как ты хранишь матрицу смежности, чтоб не делать двойную работу, я набросаю тебе отображение графа. |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
В общем, вот отображение графа, заданного матрицей смежности:
#include <windows.h> Вот что получается в результате: Эскизы прикрепленных изображений ![]() |
Rocket |
![]()
Сообщение
#13
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
volvo , а как это откомпилировать и выполнить? У меня на Dev C++ не компилируется - создаю проект WinAPI приложение, запускаю, а мне приходит сообщение, что проект не откомпилирован... А если не через проект, просто через исходный cpp-шный файл, то компилятор мне выдает следующее :
Цитата [Linker error] undefined reference to `CreatePen@12' [Linker error] undefined reference to `SelectObject@8' [Linker error] undefined reference to `MoveToEx@16' ... ld returned 1 exit status |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Это не Компилятор, а Компоновщик (он же Линкер). Компилятор претензий к программе не имеет. А вот линкер пишет тебе, что не может найти сами реализации WinAPI-шных функций. Убедись, что к проекту подключены библиотеки gdi32, user32 и kernel32 (я не знаю, как это делается в DevCpp у меня в CodeBlocks: Project -> Build Options -> закладка Linker settings, и там добавляешь библиотеки), или линкуй с этими библиотеками из командной строки...
|
Rocket |
![]()
Сообщение
#15
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Это не Компилятор, а Компоновщик (он же Линкер). Компилятор претензий к программе не имеет. А вот линкер пишет тебе, что не может найти сами реализации WinAPI-шных функций. Убедись, что к проекту подключены библиотеки gdi32, user32 и kernel32 (я не знаю, как это делается в DevCpp у меня в CodeBlocks: Project -> Build Options -> закладка Linker settings, и там добавляешь библиотеки), или линкуй с этими библиотеками из командной строки... А где вообще взять эти библиотеки? Я скачал CodeBlocks, для WinAPI-шной реализации нужно создавать проект console application или другой какой? |
Rocket |
![]()
Сообщение
#16
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Так-с, нашел эти библиотеки (libuser32.a, libkernel32.a, libgdi32.a) в библиотеках для Dev C++. Создаю console application в CodeBlocks, добавляю эти библиотеки...и запускаю, вобщем опять безрезультатно :
Цитата "sss - Debug" uses an invalid compiler. Skipping... Nothing to be done. Скриншот прилагаю... В чём опять косяк? Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
В окне "Build Log" все написано: ты не установил правильный компилятор. Закрой проект (File -> Close all projects), зайди в "Settings -> Compiler and Debugger", и в верхнем комбобоксе установи компилятор "Cygwin GCC" как компилятор по умолчанию (путь к компилятору должен быть прописан там же, на вкладке Toolchain Executables:
![]() ). Это во-первых. А во-вторых, почему Console Application? Все-таки, "Win32 GUI Project"... |
Rocket |
![]()
Сообщение
#18
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
В окне "Build Log" все написано: ты не установил правильный компилятор. Закрой проект (File -> Close all projects), зайди в "Settings -> Compiler and Debugger", и в верхнем комбобоксе установи компилятор "Cygwin GCC" как компилятор по умолчанию (путь к компилятору должен быть прописан там же, на вкладке Toolchain Executables: ![]() ). Это во-первых. А во-вторых, почему Console Application? Все-таки, "Win32 GUI Project"... Всё сделал, как описано выше. Но теперь происходит следующее (см. скриншот) В чем сейчас причина? Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
То есть, EXE-файл создался, и не запускается? Отдельно от IDE, из Explorer-а тоже не запускается? Что говорит?
Тогда попробуй создать новое приложение, Win32 GUI Project, Frame based, но оставить там все по умолчанию, то есть, тот код минимального Win32-приложения, который предлагает сама Code::Blocks. И сделать ему Build (Ctrl+F9) и запустить. Если и это не получится... Хм, что ж, значит не судьба тебе на Висте использовать Code Blocks... |
Rocket |
![]()
Сообщение
#20
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
То есть, EXE-файл создался, и не запускается? Отдельно от IDE, из Explorer-а тоже не запускается? Что говорит? Тогда попробуй создать новое приложение, Win32 GUI Project, Frame based, но оставить там все по умолчанию, то есть, тот код минимального Win32-приложения, который предлагает сама Code::Blocks. И сделать ему Build (Ctrl+F9) и запустить. Если и это не получится... Хм, что ж, значит не судьба тебе на Висте использовать Code Blocks... Никакого exe-шника я не нашел. С минимальным Win32-приложением тоже ничего не выходит... Но, я это всё проделал на XP, и результат тот же самый! Вот что мне Build выдает: Цитата -------------- Build: Debug in graph --------------- Compiling: main.cpp Execution of 'g++.exe -Wall -g -c E:/CodeBlocks/graph/main.cpp -o obj/Debug/main.o' in 'E:\CodeBlocks\graph' failed. Nothing to be done. Это совсем гиблое дело? |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 2:09 |