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

> Прочтите прежде чем задавать вопрос!

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

> Граф и ссылки, Как задать граф с помощью динамич. структур данных.
looogle
сообщение 16.03.2012 22:29
Сообщение #1


Новичок
*

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

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


Есть такой код. Универсальный способ обхода древовидного графа. С ним я разобрался. А вот как задать граф я не понимаю.

Граф:

Изображение


type ukazatel = ^tree;
tree = record
data:integer;
left:ukazatel;
right:ukazatel;
end;

var p, root:ukazatel;
k, i:integer;

procedure treego(p: ukazatel; k:integer);
begin
P^.data := k;
if p^.left<>nil then treego(p^.left, k+1);
if p^.right<>nil then treego(p^.right, k+1);
write('Done!');
end;

begin
new(root);
treego(root, 1);
end.



Пожалуйста, помогите. blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 17.03.2012 18:56
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

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


Цитата
А вот как задать граф я не понимаю.
Больше похоже на дерево, а не на граф.

Я в таких случаях пользуюсь приемом, подсмотренным в TurboVision в свое время (у них подобным образом организуются меню любой вложенности - одним вызовом):
type ukazatel = ^tree;
tree = record
data:integer;
left:ukazatel;
right:ukazatel;
end;

procedure walk(p: ukazatel; level:integer);
begin
writeln('':2*level, p^.data);
if p^.left<>nil then walk(p^.left, level+1);
if p^.right<>nil then walk(p^.right, level+1);
end;

function it(value : integer; L, R : ukazatel) : ukazatel;
var p : ukazatel;
begin
new(p);
with p^ do
begin
data := value;
left := L;
right := R;
end;
it := p;
end;

var
root : ukazatel;

begin
root := it(2,
it(7,
it(2, nil, nil),
it(6,
it(5, nil, nil),
it(11, nil, nil)
)
),
it(5,
nil,
it(9,
it(4, nil, nil),
nil
)
)
);

walk(root, 0); { <--- Выводим, что получилось}
{ Не забудь удалить структуру }
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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