Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое...

99
Заглавная страница Графы Гаевой, Казменко, Макаров Санкт-Петербургский Государственный Университет Четверг, 19 ноября 2020 года Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 1 / 29

Upload: others

Post on 23-Dec-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Заглавная страница

Графы

Гаевой, Казменко, Макаров

Санкт-Петербургский Государственный Университет

Четверг, 19 ноября 2020 года

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 1 / 29

Page 2: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Содержание

Содержание

1 ВведениеОпределенияЗадание графаХранение графаКод

2 Поиск в ширинуПримерКод

3 Поиск в глубинуПримерКод

4 Неявные графыКлетчатая доскаШахматный конь

5 ЗадачиСвязностьДеревоТопологическаясортировкаМосты

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 2 / 29

Page 3: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение

Содержание

1 ВведениеОпределенияЗадание графаХранение графаКод

2 Поиск в ширинуПримерКод

3 Поиск в глубинуПримерКод

4 Неявные графыКлетчатая доскаШахматный конь

5 ЗадачиСвязностьДеревоТопологическаясортировкаМосты

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 3 / 29

Page 4: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Определения

Определения

1

2

3

4

5

6

7

8

9

Определение: граф (неориентированный) — это пара (V ,E), гдеV —множество вершин, а E—множество (неориентированных)рёбер. Каждое ребро— это неупорядоченная пара вершин.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 4 / 29

Page 5: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Определения

Определения

1

2

3

4

5

6

7

8

9

Определение: ориентированный граф (орграф) — это пара(V ,E), где V —множество вершин, а E—множество дуг(ориентированных рёбер). Каждое ребро— это упорядоченнаяпара вершин.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 4 / 29

Page 6: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Определения

Определения

1

2

3

4

5

6

7

8

9

Определение: дерево— это связный граф без циклов.Необходимые определения: компонента связности, связныйграф, цикл.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 4 / 29

Page 7: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Определения

Определения

1

2

3

4

5

6

7

8

9

Критерий: обыкновенный граф является деревом, если онсвязен и |E| = |V | − 1.Необходимое определение: обыкновенный граф.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 4 / 29

Page 8: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Задание графа

Задание графа

1

2

3

4

5

6

7

8

9

Ввод:

9 81 21 42 72 44 64 75 87 9

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 5 / 29

Page 9: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Задание графа

Задание графа

1

2

3

4

5

6

7

8

9

Ввод:

9 111 22 72 44 17 24 64 75 87 48 59 7

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 5 / 29

Page 10: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Хранение графа

Матрица смежности

1

2

3

4

5

6

7

8

9

Ввод:

9 81 21 42 72 44 64 75 87 9

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

0 1 0 1 0 0 0 0 0

1 0 0 1 0 0 1 0 0

0 0 0 0 0 0 0 0 0

1 1 0 0 0 1 1 0 0

0 0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0 0

0 1 0 1 0 0 0 0 1

0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 1 0 0

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 6 / 29

Page 11: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Хранение графа

Матрица смежности

1

2

3

4

5

6

7

8

9

Ввод:

9 111 22 72 44 17 24 64 75 87 48 59 7

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

0 1 0 0 0 0 0 0 0

0 0 0 1 0 0 1 0 0

0 0 0 0 0 0 0 0 0

1 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 0

0 1 0 1 0 0 0 0 0

0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 1 0 0

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 6 / 29

Page 12: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Хранение графа

Списки смежных вершин

1

2

3

4

5

6

7

8

9

Ввод:

9 81 21 42 72 44 64 75 87 9

1

2

3

4

5

6

7

8

9

2 4

1 7 4

1 2 6 7

8

4

2 4 9

5

7

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 7 / 29

Page 13: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Хранение графа

Списки смежных вершин

1

2

3

4

5

6

7

8

9

Ввод:

9 111 22 72 44 17 24 64 75 87 48 59 7

1

2

3

4

5

6

7

8

9

2

7 4

1 6 7

8

2 4

5

7

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 7 / 29

Page 14: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Код

Матрица смежности

1 #include <iostream>2 #include <vector>3 using namespace std;45 int main () {6 int n, m;7 cin >> n >> m;8 vector <vector <int> > a (n,9 vector <int> (n, 0));10 for (int j = 0; j < m; j++) {11 int u, v;12 cin >> u >> v;13 u -= 1;14 v -= 1;15 a[u][v] = 1;16 a[v][u] = 1;17 }18 return 0;19 }

Ввод:

9 81 21 42 72 44 64 75 87 9

0

1

2

3

4

5

6

7

8

0 1 2 3 4 5 6 7 8

0 1 0 1 0 0 0 0 0

1 0 0 1 0 0 1 0 0

0 0 0 0 0 0 0 0 0

1 1 0 0 0 1 1 0 0

0 0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0 0

0 1 0 1 0 0 0 0 1

0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 1 0 0

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 8 / 29

Page 15: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Код

Матрица смежности

1 #include <iostream>2 #include <vector>3 using namespace std;45 int main () {6 int n, m;7 cin >> n >> m;8 vector <vector <int> > a (n,9 vector <int> (n, 0));10 for (int j = 0; j < m; j++) {11 int u, v;12 cin >> u >> v;13 u -= 1;14 v -= 1;15 a[u][v] = 1;1617 }18 return 0;19 }

Ввод:

9 111 22 72 44 17 24 64 75 87 48 59 7

0

1

2

3

4

5

6

7

8

0 1 2 3 4 5 6 7 8

0 1 0 0 0 0 0 0 0

0 0 0 1 0 0 1 0 0

0 0 0 0 0 0 0 0 0

1 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 0

0 1 0 1 0 0 0 0 0

0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 1 0 0

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 8 / 29

Page 16: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Код

Списки смежных вершин

1 #include <iostream>2 #include <vector>3 using namespace std;45 int main () {6 int n, m;7 cin >> n >> m;8 vector <vector <int> > adj (n);910 for (int j = 0; j < m; j++) {11 int u, v;12 cin >> u >> v;13 u -= 1;14 v -= 1;15 adj[u].push_back (v);16 adj[v].push_back (u);17 }18 return 0;19 }

Ввод:

9 81 21 42 72 44 64 75 87 9

0

1

2

3

4

5

6

7

8

1 3

0 6 3

0 1 5 6

7

3

1 3 8

4

6

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 9 / 29

Page 17: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Введение Код

Списки смежных вершин

1 #include <iostream>2 #include <vector>3 using namespace std;45 int main () {6 int n, m;7 cin >> n >> m;8 vector <vector <int> > adj (n);910 for (int j = 0; j < m; j++) {11 int u, v;12 cin >> u >> v;13 u -= 1;14 v -= 1;15 adj[u].push_back (v);1617 }18 return 0;19 }

Ввод:

9 111 22 72 44 17 24 64 75 87 48 59 7

0

1

2

3

4

5

6

7

8

1

6 3

0 5 6

7

1 3

4

6

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 9 / 29

Page 18: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

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

Содержание

1 ВведениеОпределенияЗадание графаХранение графаКод

2 Поиск в ширинуПримерКод

3 Поиск в глубинуПримерКод

4 Неявные графыКлетчатая доскаШахматный конь

5 ЗадачиСвязностьДеревоТопологическаясортировкаМосты

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 10 / 29

Page 19: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

Задача: найдите кратчайшие расстоя-ния от вершины 1 до всех остальныхвершин.

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 20: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 21: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 22: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 23: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 24: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2 7

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 25: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2 7 8

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 26: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2 7 8

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 27: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2 7 8 9

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 28: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2 7 8 9

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 29: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 6 5 2 7 8 9

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 11 / 29

Page 30: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Код

Код breadth-first search

1 /* ... */2 int const infinity = 1000000001;3 /* ... */4 vector <int> d (n, infinity);5 queue <int> q;6 d[0] = 0;7 q.push (0);8 while (!q.empty ()) {9 auto v = q.front ();10 q.pop ();11 cout << v + 1 << ": " << d[v] << endl;12 for (int u = 0; u < n; u++) if (a[v][u]) {13 if (d[u] == infinity) {14 d[u] = d[v] + 1;15 q.push (u);16 }17 }18 }19 /* ... */

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 12 / 29

Page 31: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в ширину Код

Код breadth-first search

1 /* ... */2 int const infinity = 1000000001;3 /* ... */4 vector <int> d (n, infinity);5 queue <int> q;6 d[0] = 0;7 q.push (0);8 while (!q.empty ()) {9 auto v = q.front ();10 q.pop ();11 cout << v + 1 << ": " << d[v] << endl;12 for (auto u : adj[v]) {13 if (d[u] == infinity) {14 d[u] = d[v] + 1;15 q.push (u);16 }17 }18 }19 /* ... */

Вывод:

1: 03: 14: 16: 15: 22: 27: 28: 39: 3

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 12 / 29

Page 32: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

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

Содержание

1 ВведениеОпределенияЗадание графаХранение графаКод

2 Поиск в ширинуПримерКод

3 Поиск в глубинуПримерКод

4 Неявные графыКлетчатая доскаШахматный конь

5 ЗадачиСвязностьДеревоТопологическаясортировкаМосты

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 13 / 29

Page 33: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

Задача: посетите все вершины, дости-жимые из вершины 1.

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 34: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 35: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 36: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 37: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 38: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 39: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 40: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8 7

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 41: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8 7 6

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 42: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8 7

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 43: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8 7 9

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 44: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8 7

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 45: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5 8

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 46: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2 5

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 47: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4 2

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 48: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3 4

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 49: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1 3

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 50: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

1

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 51: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Поиск в глубину Пример

Пример

1

2

3

4

5

6

7

8

910

11

Ввод:

11 121 61 46 72 54 34 25 87 87 91 33 510 11

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 14 / 29

Page 52: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

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

Код depth-first search

1 /* ... */2 vector <vector <int> > a;3 vector <bool> vis;4 int n, m;56 void dfs (int v) {7 if (vis[v])8 return;9 vis[v] = true;10 cout << "in " << v + 1 << endl;11 for (int u = 0; u < n; u++) if (a[v][u]) {12 dfs (u);13 }14 cout << "out " << v + 1 << endl;15 }16 /* ... */17 vis = vector <bool> (n);18 dfs (0);19 /* ... */

Вывод:

in 1in 3in 4in 2in 5in 8in 7in 6out 6in 9out 9out 7out 8out 5out 2out 4out 3out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 15 / 29

Page 53: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

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

Код depth-first search

1 /* ... */2 vector <vector <int> > adj;3 vector <bool> vis;4 int n, m;56 void dfs (int v) {7 if (vis[v])8 return;9 vis[v] = true;10 cout << "in " << v + 1 << endl;11 for (auto u : adj[v]) {12 dfs (u);13 }14 cout << "out " << v + 1 << endl;15 }16 /* ... */17 vis = vector <bool> (n);18 dfs (0);19 /* ... */

Вывод:

in 1in 6in 7in 8in 5in 2in 4in 3out 3out 4out 2out 5out 8in 9out 9out 7out 6out 1

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 15 / 29

Page 54: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы

Содержание

1 ВведениеОпределенияЗадание графаХранение графаКод

2 Поиск в ширинуПримерКод

3 Поиск в глубинуПримерКод

4 Неявные графыКлетчатая доскаШахматный конь

5 ЗадачиСвязностьДеревоТопологическаясортировкаМосты

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 16 / 29

Page 55: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска

Пример 1:

Есть клетчатая доска.

Некоторые клетки заняты.

Соседними считаются клетки, имеющие общую сторону.

За один шаг можно перемещаться на соседнюю незанятуюклетку.

Определите, докуда можно добраться из начальной клетки.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 17 / 29

Page 56: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска

Пример 1:

Есть клетчатая доска.

Некоторые клетки заняты.

Соседними считаются клетки, имеющие общую сторону.

За один шаг можно перемещаться на соседнюю незанятуюклетку.

Определите, докуда можно добраться из начальной клетки.

Как будем решать:

Граф: вершины— клетки, рёбра— переходы в соседей.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 17 / 29

Page 57: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска

Пример 1:

Есть клетчатая доска.

Некоторые клетки заняты.

Соседними считаются клетки, имеющие общую сторону.

За один шаг можно перемещаться на соседнюю незанятуюклетку.

Определите, докуда можно добраться из начальной клетки.

Как будем решать:

Граф: вершины— клетки, рёбра— переходы в соседей.

Нужно найти компоненту связности начальной клетки.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 17 / 29

Page 58: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска

Пример 1:

Есть клетчатая доска.

Некоторые клетки заняты.

Соседними считаются клетки, имеющие общую сторону.

За один шаг можно перемещаться на соседнюю незанятуюклетку.

Определите, докуда можно добраться из начальной клетки.

Как будем решать:

Граф: вершины— клетки, рёбра— переходы в соседей.

Нужно найти компоненту связности начальной клетки.

Будем нумеровать вершины и рёбра?

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 17 / 29

Page 59: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска— решение

Граф: вершины— клетки, рёбра— переходы в соседей.

Нужно найти компоненту связности начальной клетки.

Вершина— это координаты (row, col).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 18 / 29

Page 60: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска— решение

Граф: вершины— клетки, рёбра— переходы в соседей.

Нужно найти компоненту связности начальной клетки.

Вершина— это координаты (row, col).Рёбра:

в (row− 1, col),в (row, col− 1),в (row+ 1, col),в (row, col+ 1).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 18 / 29

Page 61: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Клетчатая доска

Клетчатая доска— решение

Граф: вершины— клетки, рёбра— переходы в соседей.

Нужно найти компоненту связности начальной клетки.1 int const dirs = 4;2 int const dRow [dirs] = {-1, 0, +1, 0};3 int const dCol [dirs] = { 0, -1, 0, +1};4 /* ... */5 void dfs (int row, int col) {6 if (vis[row][col]) return;7 vis[row][col] = true;8 for (int dir = 0; dir < dirs; dir++) {9 int nRow = row + dRow[dir];10 int nCol = col + dCol[dir];11 if (0 <= nRow && nRow < rows &&12 0 <= nCol && nCol < cols &&13 !wall[nRow][nCol]) {14 dfs (nRow, nCol);15 }16 }17 }

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 18 / 29

Page 62: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Шахматный конь

Шахматный конь

Пример 2:

На шахматной доске n× n в клетке A стоит конь.

За какое минимальное количество ходов он может попастьв клетку B?

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 19 / 29

Page 63: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Шахматный конь

Шахматный конь

Пример 2:

На шахматной доске n× n в клетке A стоит конь.

За какое минимальное количество ходов он может попастьв клетку B?

Как будем решать:

Граф: вершины— клетки, рёбра— ходы коня.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 19 / 29

Page 64: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Шахматный конь

Шахматный конь

Пример 2:

На шахматной доске n× n в клетке A стоит конь.

За какое минимальное количество ходов он может попастьв клетку B?

Как будем решать:

Граф: вершины— клетки, рёбра— ходы коня.

Нужно запустить поиск в ширину из клетки A.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 19 / 29

Page 65: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Неявные графы Шахматный конь

Шахматный конь— решение

Граф: вершины— клетки, рёбра— ходы коня.

Нужно запустить поиск в ширину из клетки A.1 int const dirs = 8;2 int const dRow [dirs] = {-1, -2, -2, -1, +1, +2, +2, +1};3 int const dCol [dirs] = {-2, -1, +1, +2, +2, +1, -1, -2};4 /* ... */5 while (!q.empty ()) {6 int row = q.front ().first;7 int col = q.front ().second;8 q.pop ();9 for (int dir = 0; dir < dirs; dir++) {10 int nRow = row + dRow[dir];11 int nCol = col + dCol[dir];12 if (0 <= nRow && nRow < rows &&13 0 <= nCol && nCol < cols &&14 d[nRow][nCol] == infinity) {15 d[nRow][nCol] = d[row][col] + 1;16 q.push (make_pair (nRow, nCol));17 }18 }

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 20 / 29

Page 66: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи

Содержание

1 ВведениеОпределенияЗадание графаХранение графаКод

2 Поиск в ширинуПримерКод

3 Поиск в глубинуПримерКод

4 Неявные графыКлетчатая доскаШахматный конь

5 ЗадачиСвязностьДеревоТопологическаясортировкаМосты

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 21 / 29

Page 67: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Связность

Связность

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, связен ли он.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 22 / 29

Page 68: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Связность

Связность

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, связен ли он.Как будем решать:

Запустим поиск из любой вершины.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 22 / 29

Page 69: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Связность

Связность

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, связен ли он.Как будем решать:

Запустим поиск из любой вершины.

Можно поиск в ширину, можно поиск в глубину.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 22 / 29

Page 70: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Связность

Связность

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, связен ли он.Как будем решать:

Запустим поиск из любой вершины.

Можно поиск в ширину, можно поиск в глубину.

Проверим, что мы посетили все вершины.Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 22 / 29

Page 71: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Дерево

Дерево

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, является ли ондеревом.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 23 / 29

Page 72: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Дерево

Дерево

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, является ли ондеревом.Как будем решать:

Проверим связность.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 23 / 29

Page 73: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Дерево

Дерево

1

2

3

4

5

6

7

8

9

Дан неориентированный граф. Проверьте, является ли ондеревом.Как будем решать:

Проверим связность.

Проверим, что |V | = |E|+ 1.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 23 / 29

Page 74: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

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

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 75: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Пример 1:

1

2

3

4

5

Ввод:

5 61 55 33 22 45 41 3

Вывод:

YES1 5 3 2 4

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 76: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Пример 2:

1

2

3

4

5

Ввод:

5 61 55 33 22 44 51 3

Вывод:

NO

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 77: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Как будем решать:

Посещаем вершины поиском в глубину.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 78: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Как будем решать:

Посещаем вершины поиском в глубину.

Пусть мы находимся в какой-то вершине v.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 79: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Как будем решать:

Посещаем вершины поиском в глубину.

Пусть мы находимся в какой-то вершине v.

Условимся, что, когда вершина посещена, она выведена, тоесть добавлена в порядок.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 80: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Как будем решать:

Посещаем вершины поиском в глубину.

Пусть мы находимся в какой-то вершине v.

Условимся, что, когда вершина посещена, она выведена, тоесть добавлена в порядок.

Посетим все вершины u, из которых есть дуга u→ v.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 81: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Дан ориентированный граф. Расположите его вершины втаком порядке, чтобы все дуги следовали от более раннихвершин к более поздним. Или выясните, что это невозможно.Как будем решать:

Посещаем вершины поиском в глубину.

Пусть мы находимся в какой-то вершине v.

Условимся, что, когда вершина посещена, она выведена, тоесть добавлена в порядок.

Посетим все вершины u, из которых есть дуга u→ v.

После этого выведем вершину v, тем самым выполнивнаше условие.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 24 / 29

Page 82: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как найти все такие u, для которых u→ v?

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 25 / 29

Page 83: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как найти все такие u, для которых u→ v?

Можно хранить не сами рёбра (u→ v), а обратные к ним(v → u).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 25 / 29

Page 84: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как найти все такие u, для которых u→ v?

Можно хранить не сами рёбра (u→ v), а обратные к ним(v → u).

Можно найти обратный порядок, а потом его перевернуть.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 25 / 29

Page 85: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как выяснить, что ответ не существует?

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 26 / 29

Page 86: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как выяснить, что ответ не существует?У вершины три состояния:0 ещё не посещали (fresh),1 начали посещать и не закончили (busy),2 уже посетили (done).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 26 / 29

Page 87: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как выяснить, что ответ не существует?У вершины три состояния:0 ещё не посещали (fresh),1 начали посещать и не закончили (busy),2 уже посетили (done).

Если мы пришли посещать вершину в состоянии fresh,запускаем алгоритм в ней.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 26 / 29

Page 88: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как выяснить, что ответ не существует?У вершины три состояния:0 ещё не посещали (fresh),1 начали посещать и не закончили (busy),2 уже посетили (done).

Если мы пришли посещать вершину в состоянии fresh,запускаем алгоритм в ней.

Если мы пришли посещать вершину в состоянии done,ничего не делаем с ней.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 26 / 29

Page 89: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка

Как выяснить, что ответ не существует?У вершины три состояния:0 ещё не посещали (fresh),1 начали посещать и не закончили (busy),2 уже посетили (done).

Если мы пришли посещать вершину в состоянии fresh,запускаем алгоритм в ней.

Если мы пришли посещать вершину в состоянии done,ничего не делаем с ней.

Если мы пришли посещать вершину в состоянии busy,значит, мы нашли цикл, и ответ не существует.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 26 / 29

Page 90: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка— код1 vector <vector <int> > adj;2 vector <int> vis;3 vector <int> order;4 int n, m;56 enum {fresh, busy, done};78 bool dfs (int v) {9 if (vis[v] != fresh)10 return vis[v] == done;11 vis[v] = busy;12 for (auto u : adj[v])13 if (!dfs (u))14 return false;15 order.push_back (v);16 vis[v] = done;17 return true;18 }

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 27 / 29

Page 91: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Топологическая сортировка

Топологическая сортировка— код1 cin >> n >> m;2 adj = vector <vector <int> > (n);3 for (int j = 0; j < m; j++) {4 int u, v;5 cin >> u >> v;6 u -= 1;7 v -= 1;8 adj[v].push_back (u);9 }1011 vis = vector <int> (n);12 bool ok = true;13 for (int v = 0; v < n; v++)14 ok &= dfs (v);1516 if (ok) {17 cout << "YES" << endl;18 for (auto v : order)19 cout << v + 1 << " ";20 cout << endl;21 }22 else23 cout << "NO" << endl;

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 27 / 29

Page 92: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Дан неориентированный граф. Найдите все мосты в нём:рёбра, при удалении которых количество компонент связностиувеличивается.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 93: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Дан неориентированный граф. Найдите все мосты в нём:рёбра, при удалении которых количество компонент связностиувеличивается.Пример:

1

2

3

4

5

6

7

8

9

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 94: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Дан неориентированный граф. Найдите все мосты в нём:рёбра, при удалении которых количество компонент связностиувеличивается.Пример:

1

2

3

4

5

6

7

8

9

Здесь мосты— рёбра 4–6 и 7–9.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 95: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Идея решения:

11

22

39

44

56

65

73

87

98

Запустим поиск в глубину от всех вершин, запишем времявхода в каждой вершине (синее число).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 96: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Идея решения:

11

1

22

1

39

9

44

1

56

5

65

5

73

1

87

5

98

8

Для каждой вершины рассмотрим её поддерево в поиске вглубину. Все рёбра, не вошедшие в дерево— обратные рёбра.

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 97: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Идея решения:

11

1

22

1

39

9

44

1

56

5

65

5

73

1

87

5

98

8

Для каждой вершины рассмотрим её поддерево в поиске вглубину. Все рёбра, не вошедшие в дерево— обратные рёбра.Посмотрим, какие времена входа достижимы, если ходить поэтому поддереву и в конце, может быть, пройти по обратномуребру. Запишем минимальное из них (красное число).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 98: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Задачи Мосты

Мосты

Идея решения:

11

1

22

1

39

9

44

1

56

5

65

5

73

1

87

5

98

8

Если в вершине синее число (время входа) равно красному(минимум достижимых), то ребро дерева, идущее в этувершину, является мостом (если оно есть).

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 28 / 29

Page 99: Графыacm.math.spbu.ru/~gassa/bachelor-2020/201119_m20_slides...Необходимое определение: обыкновенный граф. Гаевой,Казменко,Макаров

Завершение

Вопросы?

Вопросы?

Гаевой, Казменко, Макаров (СПбГУ) Графы 19.11.2020 29 / 29