Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Поиск в глубину




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

Список литературы:

 

1. Вирт Н. Алгоритмы и структуры данных.– М.: Мир, 1989.

2. Кнут Д. Искусство программирования для ЭВМ. – В 7 т. - М.: Мир, 1876.

3. Лойко В.И. Структуры и алгоритмы данных ЭВМ: Курс лекций для спец. 220400 – Краснодар: КубГТУ, 1998.

4. Марченко А.И., «Программирование в среде «Turbo Pascal 7.0»,

«Век+», Киев 1999 г.


Приложение А

 

Листинг модуля Newtimer

unit newtimer;

interface

procedure start(var x: longint); {определяет время начала работы}

procedure stop(var x: longint); {определяет время окончания работы}

procedure format(hour, min, sec, hund: word);

procedure Report(Msg:string; x:longint);

implementation

uses dos;

var

hour_start, min_start, sec_start, hund_start,

hour_stop, min_stop, sec_stop, hund_stop,

hour, min, sec, hund: word;

systimer: longint absolute $0040: $006c;

procedure start;

begin

gettime(hour_start, min_start, sec_start, hund_start);

x:=systimer;

while x=systimer do; {ожиание момента изменения таймера}

x:=systimer;

end;

procedure stop;

begin

gettime(hour_stop, min_stop, sec_stop, hund_stop);

x:=systimer-x;

end;

procedure format;

procedure print(w: word);

begin

if w<10 then write('0');

write(w);

end;

begin

print(hour); write(':');

print(min); write(':');

print(sec); write('.');

print(hund);

writeln;

end;

procedure Report;

{Вывод на печать измеренного интервала в секундах и

сообщения через переменную Msg}

begin

write('Момент запуска: ');

format(hour_start, min_start, sec_start, hund_start);

write('Момент остановки: ');

format(hour_stop, min_stop, sec_stop, hund_stop);

writeln(msg,': ',x/182000:5:5,' cek.'); end; end.


Идея поиска в глубину формулируется следующим образом: начиная с некоторой вершины (например, первой) идем «вглубь» пока это возможно. Далее выбирается вершина u, смежная с v. Процесс повторяется с вершиной u. Если на очередном шаге оказалось что нет непросмотренных вершин связанных с текущей, то выполняется возврат к предыдущей вершине и ищется новая вершина, связанная с ней. Если такой вершины не найдено, то выполняется еще один шаг возврата к предыдущей вершине, и так до тех пор, пока вычислительный процесс не вернется к вершине, с которой начат просмотр.

Для графа приведенного на рис. 8, очередность просмотра вершин при поиске в глубину указана в круглых скобках рядом с вершинами. Просмотр начат с первой вершины и приведена только часть ребер графа, по которым выполнялся следующий шаг поиска.

 

(1) (7)

 

 

(3)

(2)

(6)

 

 

(5)

 

(4)

 

(8)

 

(9)

 

 

Рисунок 8. Очередность просмотра вершин при поиске в глубину.

 

При реализации поиска используется второй способ представления графа-перечень списков смежных вершин. Описание элементов списка очевидно. Для хранения значений указателей на первые элементы списков для каждой вершины графа используется массив А. номера вершин записываются в массив Rez в той очередности, в которой они просматриваются в процессе поискав глубину (рис. 8 числа в круглых скобках). Для фиксации признака, просмотрена вершина графа или нет, требуется массив Nnew с элементами логического типа.

 

Program Graph_Deths;

Const MaxN=10;

Type pt=^elem;

Elem=Record

data:integer;

next:pt

End;

MyArray=Array [1...MaxN] Of pt;

MyNew=Array [1...MaxN] Of Boolean;

MyRez=Array [1...MaxN] Of Integer;

Var A:MyArray;

{*Массив указателей на первые элементы списков.*}

Nnew:MyNew;

{*Массив признаков просмотренных вершин графа.*}

Rez:MyRez;

{*Очередность просмотра вершин графа*}

N, cnt:Integer;

{ *Количество вершин в гарфе. Счетчик числа записей в массив Rez.*}

Procedure Insert_List_End (Var t:pt;x:Integer);

{* Вставка элемента в конец списка. Процедура рассмотрена на предыдущих занятиях.*}

Procedure Init; { *Ввод и инициализация данных. Структура входного файла: в первой строке количество вершин графа (N); затем N строк, по одной на каждую из вершин графа. Первое число в строке-количество ребер выходящих из вершины, а затем номера вершин, с которыми связана текущая вершина. Справа по тексту приведен пример входного файладля графа, рассмотренного ранее.*}

Var i,j,w,q:Integer;

Begin

Cnt:=0;

Assign (Input.’Input.txt’); Reset (Input);

Readln (N); {*количество вершин графа*}

For i:=1 To N Do

Begin

A[i]:=Nil; Nnew [i]:=True; Rez [i]:=0

End;

For i:=1 To N Do

Begin

Read (q);

{* Степень вершины графа-число ребер, связанных с данной вершиной.*}

For j:=1 To q Do

Begin

Read (w);

Insert_List_End (A[i],w)

End;

End;

Close (Input);

End;

Procedure Inc_Rez (v:Integer);

Begin

Inc (cnt); Rez [cnt]:=v;

End;

Procedure Search_Depths (v:Integer);

{* Рекурсивный вариант процедуры поиска в глубину.*}

Var t:pt;

Begin

Nnew [v]=False;

{* Помечаем вершину как просмотренную.*}

While t<>Nil Do

Begin

If Nnew [t^.data] Then

Begin

{* если вершина не просмотрена, то записываем ее номер в результирующий массив и идем ‘вглубь’, т.е. к этой вершине.* }

Inc_Rez (t^.data);

Search_Depths (t^.data);

End;

t:=t^.next;

{* Переход к следующему элементу списка.*}

End;

End;

Procedure Print; {* Вывод результата.* }

Var i:Integer;

Begin

Assign (Output, ‘Output.txt’); ReWritw (Output);

For i:=1 To N Do Write (Rez[i], ‘ ‘);

Writeln;

Close (Output);

End;

Begin {* Один из вариантов основной программы.*}

Init;

Inc_Rez (1);

Search_Depths (1);

Print;

End.

 

 

Рассмотрена рекурсивная реализация поиска в глубину. Уход от рекурсии требует введения стека для запоминания просмотренных вершин. Последняя запомненная вершина должна первой выбираться на последующую обработку.


DRAM (Dynamic random access memory, Динамическая память с произвольным доступом) — тип энергозависимой полупроводниковой памяти с произвольным доступом; DRAM широко используемая в качестве оперативной памяти современных компьютеров, а также в качестве постоянного хранилища информации в системах, требовательных к задержкам.

Язык программирования Оккам (англ. Occam) — это процедурный язык параллельного программирования высокого уровня, разработанный в начале 80-х годов группой учёных из Оксфорда под руководством Дэвида Мэя (англ. David May) по заданию английской компании INMOS Ltd. в рамках работ по созданию транспьютеров. Назван в честь английского философа XIV века Уильма Оккамского, а его сентенция, известная как бритва Оккама, является девизом проекта.




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 259; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.023 сек.