СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Алгоритмы на графах

Категория: Информатика

Нажмите, чтобы узнать подробности

DFS, BFS

Просмотр содержимого документа
«Алгоритмы на графах»

Алгоритмы на графах: поиск в ширину и  в глубину Составитель: Вирченко Н. И.

Алгоритмы на графах: поиск в ширину и в глубину

Составитель: Вирченко Н. И.

Где можно использовать алгоритмы? Олимпиадное программирование В 9 классе при изучении темы «Графические информационные модели» В 10 классе при изучении темы «Двумерный массив» В 11 классе при изучении темы «Программирование»

Где можно использовать алгоритмы?

  • Олимпиадное программирование
  • В 9 классе при изучении темы «Графические информационные модели»
  • В 10 классе при изучении темы «Двумерный массив»
  • В 11 классе при изучении темы «Программирование»
Основные сведения о графах Так или иначе, каждый человек в своей жизни, сам не подозревая об этом, встречался с теорией графов: либо, прокладывая маршрут путешествия, либо на предметных олимпиадах, либо в материалах учебников по географии, химии, физике, либо даже в аэропорту, изучая карту полетов самолета. Теория графов применяется в таких областях, как физика, химия, проектирование вычислительных машин, электротехника, машиностроение, архитектура, генетика, психология, социология, экономика и лингвистика .

Основные сведения о графах

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

Основные сведения о графах

  • Граф  — это конечное множество точек, называемых  вершинами , и линий, соединяющих некоторые из вершин, называемых  ребрами  или дугами в зависимости от вида графа.
Задача Друзья (40 баллов) Петя и Вася поехали в пионерский лагерь, а ездят они в лагерь не первый год. И оказывается, чем больше ездишь, тем больше друзей заводишь, потому что у твоих друзей есть друзья, которые в свою очередь становятся твоими друзьями. И Вася решил написать программу, которая может определить количество друзей у конкретного человека в отряде и просит тебя помочь ему.  Вася сформулировал задачу так: В отряде N человек. Многие из них – друзья. Так же известно, что друзья друзей так же являются друзьями. Требуется выяснить, сколько всего друзей у конкретного человека в отряде. Задание. Помогите Васе написать программу, которая будет выдавать количество друзей у заданного по номеру S человека из отряда, в котором N человек. Входные данные Выходные данные 3 1 2 0 1 0 1 0 1 0 1 0

Задача

Друзья (40 баллов)

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

Вася сформулировал задачу так: В отряде N человек. Многие из них – друзья. Так же известно, что друзья друзей так же являются друзьями. Требуется выяснить, сколько всего друзей у конкретного человека в отряде. Задание. Помогите Васе написать программу, которая будет выдавать количество друзей у заданного по номеру S человека из отряда, в котором N человек.

Входные данные Выходные данные

3 1 2

0 1 0

1 0 1

0 1 0

Обход графа в глубину DFS Стартовая вершина 0 Обход - 1, 2, 3, 4, 5 Назад – в 4 Обход – 6 Назад – в 4, 3 Обход – 7, 8 Назад – в 7 Обход - 9, 10, 11 Назад – в 10 Обход – 12, 13 Назад – в 12 Обход – 14, 15 Назад – в 14 Обход – 16 Назад – в 14, 12,10, 9, 7, 3, 2 Обход – 17 Назад – в 2, 1, 0 Обход – 18 Назад – в 0  18 5 1 2 4 0 3 6 15 17 7 14 8 12 9 16 10 13 11

Обход графа в глубину DFS

Стартовая вершина 0

Обход - 1, 2, 3, 4, 5

Назад – в 4

Обход – 6

Назад – в 4, 3

Обход – 7, 8

Назад – в 7

Обход - 9, 10, 11

Назад – в 10

Обход – 12, 13

Назад – в 12

Обход – 14, 15

Назад – в 14

Обход – 16

Назад – в 14, 12,10, 9, 7, 3, 2

Обход – 17

Назад – в 2, 1, 0

Обход – 18

Назад – в 0

18

5

1

2

4

0

3

6

15

17

7

14

8

12

9

16

10

13

11

Обход графа в глубину DFS 18 5 1 2 4 0 3 6 15 17 7 14 8 9 12 16 10 13 11

Обход графа в глубину DFS

18

5

1

2

4

0

3

6

15

17

7

14

8

9

12

16

10

13

11

Ввод графа в программе Задаем граф с помощью двумерного массива G:array [1..10,1..10] of integer; Вводим двумерный массив for i:=1 to n do for j:=1 to n do read(G[i,j]);

Ввод графа в программе

Задаем граф с помощью двумерного массива

G:array [1..10,1..10] of integer;

Вводим двумерный массив

for i:=1 to n do

for j:=1 to n do

read(G[i,j]);

var n,i,j,start,count:integer; G:array [1..10,1..10] of integer; flag:array [1..10] of integer; procedure DFS(x:integer); var r:integer; begin flag[x]:= 1; for r:=1 to n do if (G[x,r]0)  and  (  flag[r]=0) then begin inc(count); DFS(r); end; end; begin count:=0; Read(n,start); for i:=1 to n do for j:=1 to n do read(G[i,j]); DFS(start); writeln(count); end. Программа на Pascal

var n,i,j,start,count:integer;

G:array [1..10,1..10] of integer;

flag:array [1..10] of integer;

procedure DFS(x:integer);

var r:integer;

begin

flag[x]:= 1;

for r:=1 to n do

if (G[x,r]0) and ( flag[r]=0) then

begin

inc(count);

DFS(r);

end;

end;

begin

count:=0;

Read(n,start);

for i:=1 to n do

for j:=1 to n do

read(G[i,j]);

DFS(start);

writeln(count);

end.

Программа на Pascal

Обход графа в ширину BFS 4 6 7 2 10 5 1 13 0 12 11 8 9 14 3 Стартовая вершина 0 1-й ход: 1, 10, 11, 12 2-й ход: 7, 4, 6, 3, 9, 14,8 3-й ход: 13, 2, 5

Обход графа в ширину BFS

4

6

7

2

10

5

1

13

0

12

11

8

9

14

3

Стартовая вершина 0

1-й ход: 1, 10, 11, 12

2-й ход: 7, 4, 6, 3, 9, 14,8

3-й ход: 13, 2, 5

Обход графа в ширину BFS 4 6 7 2 10 5 1 13 0 12 11 8 9 14 3

Обход графа в ширину BFS

4

6

7

2

10

5

1

13

0

12

11

8

9

14

3

const N=5; var start,r,i,j,count,head:integer; G:array [1..N,1..N] of integer; ochered, flag:array[1..N] of integer; begin  for i:=1 to N do  for j:=1 to N do  read(G[i,j]);  read(start);  count:=1;  flag[start]:=1;  ochered[1]:=start;  head:=0; r:=1;  while headcount do  begin  inc(head);  writeln('- ',ochered[head]);  for i:=1 to N do  if (G[ochered[head],i]0)and(flag[i]=0) then  begin  inc(count);  ochered[count]:=i;  flag[i]:=1;  end;  for i:=1 to n do  if flag[i]=0 then begin inc(r); break; end;  end;  write('waves=',r);  end.

const N=5;

var start,r,i,j,count,head:integer;

G:array [1..N,1..N] of integer; ochered, flag:array[1..N] of integer;

begin

for i:=1 to N do

for j:=1 to N do

read(G[i,j]);

read(start);

count:=1;

flag[start]:=1;

ochered[1]:=start;

head:=0; r:=1;

while headcount do

begin

inc(head);

writeln('- ',ochered[head]);

for i:=1 to N do

if (G[ochered[head],i]0)and(flag[i]=0) then

begin

inc(count);

ochered[count]:=i;

flag[i]:=1;

end;

for i:=1 to n do

if flag[i]=0 then begin inc(r); break; end;

end;

write('waves=',r);

end.

Подготовка к олимпиаде https://informatics.msk.ru/

Подготовка к олимпиаде

https://informatics.msk.ru/