Поиск в графе. Поиск в ширину и в глубину

Характеристика и сущность простых алгоритмов поиска и упорядочения элементов в графе. Выбор и содержание программирования, преимущества языка Pascal. Особенности поиска в ширину и в глубину, способы улучшения простых методов и описание алгоритма.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.04.2011
Размер файла 397,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Оглавление

  • Аннотация 2
    • 1. Выбор языка 3
    • 2. Описание программы 4
      • 2.1 Поиск в глубину 4
      • 2.2 Поиск в ширину 4
    • 3. Описание алгоритмов 6
      • 3.1 Поиск в глубину 6
      • 3.2 Поиск в ширину 6
    • 4. Алгоритмы 8
      • 4.1 Поиск в глубину 8
      • 4.2 Поиск в ширину 11

Аннотация

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

В данной работе рассматриваются два алгоритма: поиск в ширину и в глубину. Два этих метода относятся к простым алгоритмам поиска. Существует несколько причин по которым желательно стоит их изучить.

Во-первых, на простых поиска можно изучить терминологию, связанную с графами.

Во-вторых, для многих задач, связанных с поиском в графе часто удобнее использовать простые методы.

В-третьих, некоторые из простых методов можно легко улучшить методов или использовать их для улучшения более сложных.

В-четвертых, большинство сложных методов поиска основано на измененных простых методах.

1. Выбор языка

Для реализации данных алгоритмов был выбран язык Pascal. Его основные преимущества заключаются в следующем:

· Многофункциональный и удобный отладчик;

· Хорошая справка- большинство полезных команд и многое другое подробно описаны;

· Высокая скорость компиляции, высокая скорость выполнения откомпилированных программ.

2. Описание программы

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

Один из методов обхода графа. Алгоритм поиска описывается следующим образом: для каждой непройденной вершины необходимо найти все не пройденные смежные вершины и повторить поиск для них.

Посмотрите на рисунок ниже.

2.2 Поиск в ширину

Один из методов обхода графа Поиск в ширину выполняется в следующем порядке: началу обхода s приписывается метка 0, смежным с ней вершинам -- метка 1. Затем поочередно рассматривается окружение всех вершин с метками 1, и каждой из входящих в эти окружения вершин приписываем метку 2 и т. д. Это видно на рисунке ниже.

3. Описание алгоритмов

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

Рассмотрим пример работы алгоритма на графе ниже.

1-й шаг

Идем от первой вершины в “глубь” графа. Пометим её вершину второй.

2-й шаг

То же самое со второй вершиной. Так появится третья вершина.

3-й шаг

Аналогично появилась четвертая вершина.

4-й шаг

Из четвертой вершины некуда идти, так что возвращаемся в третью. Нам есть куда идти. Появилась пятая вершина.

5-й шаг

Из пятой некуда идти, из третей- тоже. Возвращаемся во вторую. Идем в шестую вершину.

6-й шаг

Теперь возвращаемся во вторую, а затем и в первую вершину.

7-й шаг

Теперь пытаемся пойти в другую вершину из первой. В седьмую.

8-й шаг

Из неё идем в восьмую вершину.

9-й шаг

Теперь нам некуда идти. Возвращаемся в седьмую. И теперь идем в девятую.

Все вершины обошли.

3.2 Поиск в ширину

Рассмотрим тот же граф, но теперь используя поиск в ширину:

1-й шаг

Из первой вершины идем в смежные и помечем их соответственно второй и третьей.

2-й шаг

Из второй вершины идем в смежные. Помечаем четвертой и пятой.

3-й шаг

Из третьей вершины идем в шестую и седьмую.

4-й шаг

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

4. Алгоритмы

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

const

MaxN=10;

type

pt=^elem;

elem=record

data:integer;

next:pt;

end;

var

a:array[1..maxn] of pt;

b:array[1..maxn] of boolean;

num:array[1..maxn] of integer;

n,cnt:integer;

procedure insertelem(var t:pt;x:integer);

var t2:pt;

begin

if t=nil then begin

new(t);

t^.data:=x;

t^.next:=nil;

end

else begin

t2:=t;

while t2^.next<>nil do

t2:=t2^.next;

new(t2^.next);

t2^.next^.data:=x;

t2^.next^.next:=nil;

end;

end;

procedure init;

var i,j,w,q:integer;

begin

cnt:=0;

assign(input,'input.txt');

reset(input);

readln(input,n);

for i:=1 to n do begin

a[i]:=nil;

b[i]:=true;

num[i]:=0;

end;

for i:=1 to n do begin

read(input,q);

for j:=1 to q do begin

read(input,w);

insertelem(a[i],w);

end;

end;

close(input);

end;

procedure incnum(v:integer);

begin

inc(cnt);

num[cnt]:=v;

end;

procedure searchdepths(v:integer);

var t:pt;

begin

b[v]:=false;

t:=a[v];

while t<>nil do begin

if b[t^.data] then begin

incnum(t^.data);

searchdepths(t^.data);

end;

t:=t^.next;

end;

end;

procedure print;

var i:integer;

begin

assign(output,'output.txt');

rewrite(output);

for i:=1 to n do

write(output,num[i],' ');

close(output);

end;

begin

init;

incnum(1);

searchdepths(1);

print;

end.

4.2 Поиск в ширину

граф алгоритм программирование поиск рascal

const

MaxN=10;

type

pt=^elem;

elem=record

data:integer;

next:pt;

end;

var

a:array[1..maxn] of pt;

b:array[1..maxn] of boolean;

num,quie:array[1..maxn] of integer;

n,cnt,k:integer;

procedure insertelem(var t:pt;x:integer);

var t2:pt;

begin

if t=nil then begin

new(t);

t^.data:=x;

t^.next:=nil;

end

else begin

t2:=t;

while t2^.next<>nil do

t2:=t2^.next;

new(t2^.next);

t2^.next^.data:=x;

t2^.next^.next:=nil;

end;

end;

procedure init;

var i,j,w,q:integer;

begin

cnt:=0;

assign(input,'input.txt');

reset(input);

readln(input,n);

for i:=1 to n do begin

a[i]:=nil;

b[i]:=true;

num[i]:=0;

quie[i]:=0;

end;

for i:=1 to n do begin

read(input,q);

for j:=1 to q do begin

read(input,w);

insertelem(a[i],w);

end;

end;

close(input);

end;

procedure incnum(v:integer);

begin

inc(cnt);

num[cnt]:=v;

end;

procedure add(v:integer);

var i:integer;

begin

i:=1;

repeat

if quie[i]=0 then begin

quie[i]:=v;

exit;

end;

inc(i);

if (i>n) then

exit;

until false;

end;

procedure searchwidth(var k:integer);

var t:pt;

begin

t:=a[quie[k]];

while t<>nil do begin

if b[t^.data] then begin

b[t^.data]:=false;

add(t^.data);

end;

t:=t^.next;

end;

incnum(quie[k]);

inc(k);

if k>n then

exit;

searchwidth(k);

end;

procedure print;

var i:integer;

begin

assign(output,'output.txt');

rewrite(output);

for i:=1 to n do

write(output,num[i],' ');

close(output);

end;

begin

init;

k:=1;

quie[1]:=1;

b[1]:=false;

searchwidth(k);

print;

end.

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [684,8 K], добавлен 05.04.2015

  • Поиск как основа функционирования СОЗ. Стратегии; эвристического поиска и управления выводом. Циклическая работа интерпретатора. Вывод на знаниях в продукционных системах. Методы поиска в глубину и ширину. Формализация задач в пространстве состояний.

    презентация [741,2 K], добавлен 14.08.2013

  • Исследование методов решения задачи о ходе коня. Описание алгоритмов для итеративной и рекурсивной программ. Генерация перестановок элементов по индексам. Построение эйлерова цикла на графе. Поиск кратчайшего пути на графе. Программная реализация задачи.

    курсовая работа [411,6 K], добавлен 25.04.2013

  • Способы построения остовного дерева (алгоритма поиска в глубину и поиска в ширину). Вид неориентированного графа. Понятие и алгоритмы нахождения минимальных остовных деревьев. Последовательность построения дерева графов по алгоритмам Крускала и Прима.

    презентация [22,8 K], добавлен 16.09.2013

  • Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.

    реферат [929,8 K], добавлен 23.09.2013

  • Способ представления графа в информатике. Алгоритмы поиска элементарных циклов в глубину в неориентированных графах. Описание среды wxDev-C++, последовательность создания проекта. Руководство пользователю программы поиска и вывода на экран простых циклов.

    курсовая работа [783,2 K], добавлен 18.02.2013

  • Особенности и преимущества языка C#. Алгоритмы поиска маршрутов в графе. Разработка вычислительной системы транспортной логистики на языке C#. Выбор среды разработки, визуализация транспортной сети. Задание условий поиска и пример работы алгоритма.

    дипломная работа [457,1 K], добавлен 24.06.2015

  • Понятие и базовые свойства ориентированного дерева. Обходы (способы нумерации вершин) в глубину и ширину. Представление бинарных графов с помощью указателей и массива, скобочной записи, списком прямых предков. Сбалансированность дерева двоичного поиска.

    презентация [330,6 K], добавлен 19.10.2014

  • Разработка программы, находящей эйлеров путь в графе с количеством вершин n от 2 до 20. Входные и выходные данные. Алгоритм поиска эйлерова пути с возвратом массива, содержащего результат. Описание модулей. Проектирование тестов методами черного ящика.

    курсовая работа [89,9 K], добавлен 25.02.2012

  • Обзор алгоритмов распознания объектов на двумерных изображениях. Выбор языка программирования. Обнаружение устойчивых признаков изображения. Исследование алгоритмов поиска объектов на плоскости. Модификация алгоритма поиска максимума дискретной функции.

    дипломная работа [1,0 M], добавлен 16.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.