IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> графы
Reflex
сообщение 15.10.2006 12:27
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

Репутация: -  0  +


как хранить граф ( самые малозанимающий по весу кб способ) не матрица смежности


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Reflex
сообщение 16.10.2006 19:21
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

Репутация: -  0  +


помогите дийстру не прошу писать, прошу тольоко написать тип граф


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 16.10.2006 20:17
Сообщение #3


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Судя по всему, имеется ввиду представление в виде списка ребер.

Можно так. Берем из файла/генерим/читаем список (массив) всех ребер, т.е. пар вида (a, b). Если граф неориентированный, дублируем ребра, т.е. кроме (a, b) храним (b, a).

Сортируем этот список по a, т.е. по первому элементу пары. В результате получим, что сначала идут все ребра, исходящие из первой вершины, потом - из второй и т.д.

Теперь пробегаем по этому списку, и заполняем массивы first[] и last[], так, что first[i] - первое ребро в списке, исходящее из вершины i, а last[i] - последнее.

Теперь мы для данной вершины умеем сразу пробегать по всем исходящим из нее ребрам - это то, что тебе понадобится при релаксации.


Итого, тип "граф" представляет из себя запись с пятью переменными:



//не тестил, не компилил

const MAX_N: longint = ???; //максимальное кол-во вершин
const MAX_EDGES: longint = ???; //максимальное количество ребер

type TEdge = record
a, b: longint
end;

type TGraph = record
n: longint;
n_edges: longint;
edges: array [1 .. MAX_EDGES] of TEdge;
first: array [1 .. MAX_N] of longint;
last: array [1 .. MAX_N] of longint;
end;

...

procedure FillFirstAndLast(var g: TGraph)
var i: longint;
begin

SortEdges(g);//сортировка ребер по a

//считаем сначала, что все вершины - изолированные
for i := 1 to g.n do begin
g.first[i] := 0;
g.last[i] := -1;
end;

//пробегаем по ребрам
for i := 1 to g.n_edges do begin
if g.first[g.edges[i].a] = 0 then
g.first[g.edges[i].a] := i;
g.last[g.edges[i].a] := i;
end;

end;

...

procedure DijkstraRelax(a: longint; var g: TGraph);
var b, edge_index: longint;
begin
...
//релаксация вершины i
//пробегаем по всем, достижимым из нее
for edge_index := g.first[a] to g.last[a] do begin
b := g.edges[edge_index].b;
//делаем что-то с b
end;
...
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Reflex   графы   15.10.2006 12:27
volvo   Ну, кроме матрицы смежностей есть еще и матрицы ин...   15.10.2006 12:34
Reflex   а как ни буть не матрицей? у меня вершин <=1 00...   15.10.2006 18:15
Reflex   не знаете?   15.10.2006 20:25
volvo   Ты на чем это собралась программировать? Смотри: г...   15.10.2006 21:47
Reflex   на делфях   15.10.2006 22:30
volvo   Тогда чего ты волнуешься за размерность матрицы? Д...   15.10.2006 22:35
Reflex   1 000 000 * 1 000 000 of longint превышает 2 гб а...   15.10.2006 22:46
Michael_Rybak   А с какого сайта решаешь, если не секрет?   15.10.2006 23:49
Reflex   я не с сайта, просто лектор раздает задачи . И что...   16.10.2006 7:01
Michael_Rybak   Запугивает ;) Так а в чем задача, собственно? С гр...   16.10.2006 13:12
Reflex   реализовать алгоритм дийкстры выразив граф (ориент...   16.10.2006 17:11
Reflex   помогите дийстру не прошу писать, прошу тольоко на...   16.10.2006 19:21
Michael_Rybak   Судя по всему, имеется ввиду представление в виде ...   16.10.2006 20:17
мисс_граффити   ох ни фига себе ты его обозвала! бедный мужик....   16.10.2006 22:38
Reflex   Помогите, пожалуйста. кто знает указатели, можите ...   19.10.2006 20:21
volvo   Ну, так это же обычный односвязный список, каждый ...   19.10.2006 20:46
Reflex   Читала, не получается реализовать :( а факю форума...   19.10.2006 21:13
volvo   Представление графов с помощью динамических структ...   19.10.2006 21:32
мисс_граффити   так. стоп. надо хранить как-нибудь или по алгоритм...   19.10.2006 23:11
Reflex   нет! не как-нибуть надо хранить списком смежно...   20.10.2006 6:22


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.06.2025 3:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"