Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Графы, кратчайший путь на С\С++


Автор: Gether 15.12.2004, 20:16
Люди!Помогите пожалуйста!Срочно нужна программа!

Программа на C/C++:
Представление графов
Вершины графов заданы номерами или названиями пунктов
На дугах определены числа ("расстояние" или "стоимость")
Граф G задается списком исходящих из а дуг,
например, (помеченных взвешенных дуг) вида
G=a:(b,2.0),(c,2),(f,3.1);
или списком троек вида
G=(a,b,1.2),(a,c,2),(a,f,3.1);
где a - название исходной вершины.

Задание:
5. Вершины графа разбиты на два подмножества - красные (A) и синие (B).
Найти кратчайший путь из красной вершины а до ближайшей синей. smile

Автор: sergejzr 15.12.2004, 20:34
Начинай писать, поможем smile

Автор: Gether 15.12.2004, 20:46
sergej.z Как лучше описывать граф на C?В виде матрицы?

Автор: sergejzr 15.12.2004, 21:37
Я просто делал массив из узлов.
узел - структура.

Автор: Gether 15.12.2004, 21:40
sergej.z Есть какие-нибудь примеры?С чего начать?

Автор: sergejzr 15.12.2004, 21:45
У тебя структура узел. В ней указатели на всех соседей(структуры дуги). Добавочно цвет, номер, название.
Дуга - содержит просто указатель на соседний узел и свой вес.
Добавлено @ 21:49

Код

struct Duga
{
double weght;
Uzel *sosed1;
Uzel *sosed2;
};
struct Uzel
{
in num;
int color;
char name[512];
Duga sosedi*;
};

Ну, если на Си++ пишешь, можешь ессно классы делать, а не структуры.
Вообще по моему здесь на форуме этот вопрос часто задавался. Попробуй поиск...

Автор: lexer 19.2.2007, 19:48
для представления графов используются матрица смежности или инциденции...

в аттаче пример поиска кратчайшего пути между вершинами методом фронта волны.
вводим кол-во вершин, заполняем матрицу смежности и задаем между какими вершинами нужно показать путь (консольный вариант)

Автор: lexer 19.2.2007, 20:40
вообще сейчас у меня похожая проблема, пишу программу с графическим интерфейсом для работы с графами. Вообщем она должна будет делать следующее:
1) заполняем матрицу смежности, программа строит граф и заполняет матрицу инциденций
2) заполняем матрицу инциденций, программа строит граф и заполняет матрицу смежности
3) сами рисуем граф, нанесением точек("вершин") и соединяющих линий("ребер") с возможностью их вращения, программа заполняет матрицу смежности и инциденций.
4) планирую сохранение в файл проекта и последующая загрузка из него.

Подскажите может есть готовые модули для работы с графами или литература, где можно почитать про них?

Заранее спасибо!

Автор: Earnest 20.2.2007, 19:33
Boost graph library

Автор: Okonner 21.2.2007, 00:13
А если сделать двухсвязный список, а потом сортировку??? Или я не понял задания?

Автор: lexer 21.2.2007, 20:52
Вот еще проблема с алгоритмом: есть у меня граф, состоящий из N вершин(в этом конкретном примере N=4), он представлен следующим образом:
1 2 (1-ая вершина смежна второй)
1 3 (1-ая смежна третьей)
2 4 (2-ая четвертой и тд) 
3 2
Не важно где они записаны, в массиве, в файле..Нужно преобразовать это в матрицу смежности и забить в StringGrid (размером NxN):
-|-------|
|1 1 1 0|
|1 1 1 1|
|1 1 1 0|
|0 1 0 1|
-|-------|
Считываю данные циклом, сначала 1 2, затем 3 1 и тд...
Заранее спасибо за помощь 

Автор: lexer 22.2.2007, 01:09
со смежной матрицой разобрался ;) 

Автор: pablo 22.2.2007, 14:13
В Boost есть всё что надо для работы с графами. Как представление, так и поиск на графах.

www.boost.org

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)