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

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

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

> графы
сообщение
Сообщение #1


Пионер
**

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

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


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


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


Пионер
**

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

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


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


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


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

 





- Текстовая версия 24.04.2024 23:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name