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

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

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

> Поиск в ширину в графе
Aleks
сообщение 13.09.2005 7:01
Сообщение #1


Новичок
*

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

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


Помогите решить задачу
Напишите и используйте в программе процедуру поиска в ширину в графе, заданном списками инцидентности. Выведите на экран номера всех вершин в порядке очередности просмотра.

я не знаю с чего начать, посмотрел в "FAQ" но не смог разобраться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Aleks
сообщение 15.09.2005 10:29
Сообщение #2


Новичок
*

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

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


как освободить память, не могу сообразить

Исходный код
uses crt;
const
max=400;
type
index= ^list;
list= record
inf: integer;
next: index;
end;
connection= array[1..max] of index;

var
lst, m: connection;
ver: array[1..max] of integer;
ocher: array[1..max+1] of integer;
key, z, raz: integer;
find_v: boolean;

procedure DP_Graph;
var
n: index;
i, j: integer;
kolvo: longint;
spro: boolean;

procedure add;
begin
new(m[i]);
m[i]^.inf:= ver[j];
m[i]^.next:= lst[i];
lst[i]:= m[i];
inc(kolvo);
end;

begin
randomize;
for i:=1 to raz do ver[i]:= random(1000);
kolvo:= 0;
for i:=1 to raz do
begin
lst[i]:= nil;
for j:=1 to raz do
begin
spro:= true;
if j<> raz then
begin
if j=i then inc(j);
n:= nil;
n:= lst[j];
if lst[j]<>nil then
repeat
if n^.inf=ver[i] then spro:= false;
n:= n^.next;
until (n=nil) or (not(spro));
if (round(random)=1) and spro then add;
end;
end;
end;
writeln('Kol-vo reber Grapha: ',kolvo);
writeln;
end;

procedure print_ver;
var
i: integer;
begin
for i:=1 to raz do
begin
write(ver[i],'');
m[i]:= lst[i];
if m[i]<>nil then
repeat
write(m[i]^.inf,'=');
m[i]:= m[i]^.next;
until m[i]= nil;
writeln('');
end;
end;

procedure find_Graph(find_v: boolean; key: integer);
var
q: integer;
t, ov, oc, i: integer;
pr: boolean;

procedure p_ver;
var
j, i: integer;
pr: boolean;
begin
for i:=2 to raz do
begin
m[i]:= lst[i];
repeat
pr:= false;
q:= m[i]^.inf;
m[i]:= m[i]^.next;
if ocher[oc]=q then
begin
for j:=1 to ov do if ocher[j]=ver[i] then pr:= true;
if pr=false then
begin
ocher[ov]:= ver[i];
inc(ov);
end;
end;
until m[i]=nil;
end;
i:= 2;
end;

begin
ov:= 1; oc:= 1;
ocher[oc]:= ver[oc];
m[oc]:= lst[oc];
while m[oc]<>nil do
begin
q:= m[oc]^.inf;
m[oc]:= m[oc]^.next;
inc(ov);
ocher[ov]:= q;
end;
inc(ov);
p_ver;
if ocher[oc]=key then find_v:= true;
while oc<raz do
begin
inc(oc);
for i:=1 to raz do
begin
p_ver;
if ocher[oc]=ver[i] then
begin
m[i]:= lst[i];
while m[i]<> nil do
begin
pr:= false;
q:= m[i]^.inf;
m[i]:= m[i]^.next;
for t:=1 to ov do if ocher[t]=q then pr:= true;
if pr=false then
begin
ocher[ov]:= q;
inc(ov);
end;
end;
end;
end;
if ocher[oc]=key then find_v:= true;
end;
if not(find_v) then writeln('К сожалению такой вершины нет...')
else writeln('Вершина графа ',key,' найдена!');
end;

procedure delet;
begin

end;

begin
repeat
clrscr;
writeln('--', memavail);
write('Kol-vo vershin Grapha (ne menee 4) : ');
readln(raz);
until raz>3;
DP_Graph;
print_ver;
write('Vvedite iskom vershinu: ');
readln(key);
find_v:= false;
find_Graph(find_v,key);
for z:=1 to raz do write(ocher[z],' - ');
writeln;
delet;
writeln;
writeln('--', memavail);
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Aleks   Поиск в ширину в графе   13.09.2005 7:01
volvo   Вот тут глянь: http://alex.fanshop.ru/articles/gra...   13.09.2005 11:01
Aleks   я написал код для создания графа в реезультате... ...   14.09.2005 8:59
Guest   может ли быть, порядок очередности просмотра графа...   14.09.2005 12:07
volvo   Вот принцип поиска в ширину: Подобно тому как, сог...   14.09.2005 12:46
Aleks   volvo спасибо за ссылку. Программа работает. не м...   15.09.2005 9:11
volvo   Расшифровка - дальше в тексте программы: {указател...   15.09.2005 9:47
Aleks   как освободить память, не могу сообразить uses cr...   15.09.2005 10:29
volvo   А что, Mark/Release уже отменили? ;) Var p_sta...   15.09.2005 11:13
Aleks   Спасибо volvo, что бы я делал без тебя volvo не ...   15.09.2005 11:29
volvo   :D Делал бы сам ... Огрех или не огрех, но так...   15.09.2005 11:58
Aleks   Как организовать освобождение памяти не с помощью ...   4.10.2005 10:47
hiv   Вначале созавай динамические переменные с помощью ...   4.10.2005 10:53
volvo   Aleks, у тебя же создаются элементы mprocedure de...   4.10.2005 10:59
Aleks   Результат работы программы остается 64 б --526432 ...   4.10.2005 11:02
volvo   А ты проходил по программе в пошаговом режиме? У т...   4.10.2005 11:28
Aleks   может я ошибаюсь, но для m[i] вершины указываютс...   4.10.2005 12:23
volvo   Угу... Только вот компилятор тебя не понял, и удал...   4.10.2005 12:26
Aleks   а как процедура выводит связи с другими вершинами?...   4.10.2005 12:40
volvo   О !!! Меня посетила простая до невозмо...   4.10.2005 12:49
Aleks   работает благодарю за помощь   4.10.2005 12:57


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

 



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