ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° «Поиск Π² ΡˆΠΈΡ€ΠΈΠ½ΡƒΒ»

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ ΠΈΠ· Β«Π“Ρ€Π°Ρ„ΠΎΠ²Β». ΠŸΠ΅Ρ€Π΅Π΄ объяснСниСм самой Π·Π°Π΄Π°Ρ‡ΠΈ разбСрёмся с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ. Π’ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прямо ΠΈΠ»ΠΈ косвСнно Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎ всСх Ρ‚Ρ€Ρ‘Ρ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ… этой Ρ‚Π΅ΠΌΡ‹.

ΠžΠ±Ρ…ΠΎΠ΄ Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΈΠ· Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΏΠΎ лСкциям:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠŸΡ€ΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ порядку:

1) Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ значСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ (Ρ‚Π°ΠΌ пусто, Π»ΠΈΠ±ΠΎ стСна, Π»ΠΈΠ±ΠΎ Π² этой ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ ΡƒΠΆΠ΅ ΠΏΠΎΠ±Ρ‹Π²Π°Π»ΠΈ)

2) Π”Π°Π»Π΅Π΅ всё стандартно β€” ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ значСния ΠΈΠ· Enum

А Π²ΠΎΡ‚ с 25 строки начинаСтся Ρ‚ΠΎΡ‚ самый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

3) Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ»Π°ΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ

4) ДобавляСм Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° начинаСтся ΠΎΠ±Ρ…ΠΎΠ΄ Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (26 строка)

5) И ΠΏΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ опустССт Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия (27-41 строки):

Β· ДостаСм ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈ провСряСм, Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ ΠΎΠ½Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ нашСго поля Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

Β· Π”Π°Π»Π΅Π΅ провСряСм, Π½Π΅Ρ‚ Π»ΠΈ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ стСны, Π»ΠΈΠ±ΠΎ ΠΆΠ΅ Π½Π΅ посСщали Π»ΠΈ ΠΌΡ‹ эту ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

Β· ΠŸΠΎΠΌΠ΅Ρ‡Π°Π΅ΠΌ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅Ρ‰Ρ‘Π½Π½ΡƒΡŽ

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

·ДобавляСм сосСдСй ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ

И Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π΅Π»Π°Π΅ΠΌ N количСство Ρ€Π°Π· эти дСйствия, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠ±ΠΎΠΉΠ΄Π΅ΠΌ вСсь Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠžΡ‚ нас трСбуСтся ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ ΠΏΠΎ сундукам ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ односвязного списка. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° Π½Π΅Π³ΠΎ:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ВсС помнят Π΅Π³ΠΎ ΠΏΠΎ CVS?) Π•ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” это наша ΠΊΠ»Π΅Ρ‚ΠΊΠ° Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅ ΠΈ ссылка Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ.

Алгоритм дСйствий:

1) Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ список для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΡƒΠΆΠ΅ посСщСнныС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, посСщали Π»ΠΈ ΠΌΡ‹ эту ΠΊΠ»Π΅Ρ‚ΠΊΡƒ (опСрация ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° выполнятся Π·Π° O(1)). ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ список ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ

2) Π£ нас Π΄Π°Π½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ сундуков Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅. ΠŸΡ€ΠΈ Π»Π΅Π½ΠΈΠ²ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° SinglyLinkedList, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, содСрТится Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ сундук Π² этой ΠΊΠ»Π΅Ρ‚ΠΊΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сохраним ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ сундуков Π² ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ спискС (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π° O(1)).

4) Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ start Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΌΡ‹ посСтили

5) Π”Π°Π»Π΅Π΅ выполняСм стандартный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠ»Π΅Ρ‚ΠΎΠΊ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° (ΠΊΠ°ΠΊ Π² строках 27-41) ΠΏΡ€ΠΈ этом добавляя Π² посСщСнныС Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ. ДобавляСм Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сосСдСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. (SinglyLinkedList-ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈ ссылку Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ)

6) Π’ самом Ρ†ΠΈΠΊΠ»Π΅ while ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· достаСм SinglyLinkedList

ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ провСряСм, Π½Π΅ содСрТится Π»ΠΈ сундук ΠΏΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ, Ссли содСрТится, Ρ‚ΠΎ Π»Π΅Π½ΠΈΠ²ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ SinglyLinkedList

. Π’Π°ΠΊ ΠΊΠ°ΠΊ это односвязный список β€” это ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ start Π΄ΠΎ сундука

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅, Π΄Π΅Π»Π°Π΅ΠΌ всё максимально сами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π½Ρ‚ΠΈΠΏΠ»Π°Π³ΠΈΠ°Ρ‚ Π½Π΅ ругался.

Если Π΅ΡΡ‚ΡŒ ошибки β€” орфографичСскиС ΠΈΠ»ΠΈ фактичСскиС β€” ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ указывая Π±Π»ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΈΡ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ. Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (BFS) Π½Π° Π‘#

Π‘Ρ€Π°Π·Ρƒ скаТу, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ большС ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ людям, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с поиском Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ, ΠΈ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, ΠΎΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ понадобился этот ΠΌΠ΅Ρ‚ΠΎΠ΄, я Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π½Π°ΡˆΡ‘Π» наглядного Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° C#.

Устно ΠΎΠ± Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅:

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ Π³Ρ€Π°Ρ„Π΅ (для простоты ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ€Ρ‘Π±Ρ€Π° Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ вСс).

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

1. ВыбираСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π³Ρ€Π°Ρ„Π° (отмСчаСтся сСрым).
2.ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ (Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ сСрым), связанныС с нашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ (послС этого ΠΎΠ½Π° становится Π½Π΅ сСрой, Π° Ρ‡Ρ‘Ρ€Π½ΠΎΠΉ).
3. ВыполняСтся ΠΏΡƒΠ½ΠΊΡ‚ 2 для ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… (сСрых) Π²Π΅Ρ€ΡˆΠΈΠ½ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Ρ‹ Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΆΠ΅ самоС, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ тСхничСским языком:
1. ВыбираСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π² Π³Ρ€Π°Ρ„Π΅ ΠΈ помСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
2. Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π° смСТныС с ΡƒΠΆΠ΅ находящСйся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, послС Ρ‡Π΅Π³ΠΎ эта Π²Π΅Ρ€ΡˆΠΈΠ½Π° выталкиваСтся ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.
3. ВыполняСтся ΠΏΡƒΠ½ΠΊΡ‚ 2 для всСх Π²Π΅Ρ€ΡˆΠΈΠ½, находящихся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ нСпосрСдствСнно ΠΊ ΠΊΠΎΠ΄Ρƒ (C#):
Π’ качСствС Π³Ρ€Π°Ρ„Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ Π½Π° консоли (для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° достаточно Π±ΡƒΠ΄Π΅Ρ‚ ΠΈ Π΅Ρ‘). К слову, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„.

Π—Π°Π΄Π°Π΄ΠΈΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ наш массив.

g β€” это массив массивов, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс опрСдСляСт Π½Π°ΡˆΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив опрСдСляСт индСксы Π²Π΅Ρ€ΡˆΠΈΠ½, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ наша Π²Π΅Ρ€ΡˆΠΈΠ½Π° связана ΠΈ Π½Π΅ связана (Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0 β€” Π½Π΅ связана, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли 1 β€” связана). Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ g[1][5] = 0, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊ пятой Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π΅Ρ‚ связи (Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ симмСтричной, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ссли g[1][5] = 0, Ρ‚ΠΎ это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΈ g[5][1] = 0).

used β€” логичСский массив, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°Π½ΠΎΡΠΈΡ‚ΡŒ посСщённыС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹.

Π˜Π΄Ρ‘ΠΌ Π΄Π°Π»Π΅Π΅, собствСнно, сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π² дСйствии:

while β€” Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ опустССт. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ присваиваСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ u Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ элСмСнта ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

for β€” Ρ†ΠΈΠΊΠ», проходящий ΠΏΠΎ всСм Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌ. Π’ Π½Ρ‘ΠΌ для Π½Π°Ρ‡Π°Π»Π° провСряСм Π½Π°ΡˆΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ Π½Π΅Ρ‘ смСТных Π²Π΅Ρ€ΡˆΠΈΠ½, Ссли Π΅ΡΡ‚ΡŒ ΠΈ Ссли такая Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² массив посСщённых Π²Π΅Ρ€ΡˆΠΈΠ½ (массив used), Ρ‚ΠΎ ΠΌΡ‹ Π΅Ρ‘ Ρ‚ΡƒΠ΄Π° добавляСм, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ добавляСм Π² Π½Π°ΡˆΡƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

БобствСнно Π²ΠΎΡ‚ ΠΎΠ½ вСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π”Π°, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ Π΄Π°Π»Π΅ΠΊΠΎ Π±Π΅Π· изысков, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΡƒΠ΄Π° Π»ΡƒΡ‡ΡˆΠ΅, Π½ΠΎ ΠΏΠΈΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, надСясь, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ, ΠΊΡ‚ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ ΠΈ я, искал наглядныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΎΠ½Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Ρ…ΠΎΠ΄ Π³Ρ€Π°Ρ„Π°: поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΈ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ простыми словами Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ JavaScript

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ…ΠΎΠ΄ Π³Ρ€Π°Ρ„Π°?

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, ΠΎΠ±Ρ…ΠΎΠ΄ Π³Ρ€Π°Ρ„Π° β€” это ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π² поисках свойств связСй этих Π²Π΅Ρ€ΡˆΠΈΠ½. Бвязи (Π»ΠΈΠ½ΠΈΠΈ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ направлСниями, путями, гранями ΠΈΠ»ΠΈ Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ Π³Ρ€Π°Ρ„Π°. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ ΡƒΠ·Π»Π°ΠΌΠΈ.

Двумя основными Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π³Ρ€Π°Ρ„Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (Depth-First Search, DFS) ΠΈ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (Breadth-First Search, BFS).

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ±Ρ…ΠΎΠ΄Π° Π³Ρ€Π°Ρ„Π°, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия. НачнСм с DFS.

Поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ

DFS слСдуСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ «погруТайся Π³Π»ΡƒΠ±ΠΆΠ΅, Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄Β» (Β«go deep, head firstΒ»). ИдСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ двигаСмся ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ (Ρ‚ΠΎΡ‡ΠΊΠΈ, мСста) Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ (ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ достигнСм ΠΊΠΎΠ½Ρ†Π° ΠΏΡƒΡ‚ΠΈ ΠΈΠ»ΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния (искомой Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹). Если ΠΌΡ‹ достигли ΠΊΠΎΠ½Ρ†Π° ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ ΠΎΠ½ Π½Π΅ являСтся ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ назначСния, Ρ‚ΠΎ ΠΌΡ‹ возвращаСмся Π½Π°Π·Π°Π΄ (ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ развСтвлСния ΠΈΠ»ΠΈ расхоТдСния ΠΏΡƒΡ‚Π΅ΠΉ) ΠΈ ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρƒ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит Ρ‚Π°ΠΊ:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠœΡ‹ находимся Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Β«sΒ» ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Β«tΒ». ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ DFS, ΠΌΡ‹ исслСдуСм ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ, двигаСмся ΠΏΠΎ Π½Π΅ΠΌΡƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΈ, Ссли Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ t, возвращаСмся ΠΈ исслСдуСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит процСсс:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ двигаСмся ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ (p1) ΠΊ блиТайшСй Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΊΠΎΠ½Π΅Ρ† ΠΏΡƒΡ‚ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠœΡ‹ достигли ΠΊΠΎΠ½Ρ†Π° p1, Π½ΠΎ Π½Π΅ нашли t, поэтому возвращаСмся Π² s ΠΈ двигаСмся ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Достигнув блиТайшСй ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ Β«sΒ» Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΡƒΡ‚ΠΈ Β«p2Β» ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚Ρ€ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… направлСния для дальнСйшСго двиТСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Π²Π΅Π½Ρ‡Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΌΡ‹ ΡƒΠΆΠ΅ посСщали, Ρ‚ΠΎ двигаСмся ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠœΡ‹ вновь достигли ΠΊΠΎΠ½Ρ†Π° ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ Π½Π΅ нашли t, поэтому возвращаСмся Π½Π°Π·Π°Π΄. Π‘Π»Π΅Π΄ΡƒΠ΅ΠΌ ΠΏΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ ΠΏΡƒΡ‚ΠΈ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, достигаСм искомой Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Β«tΒ».

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π’Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ DFS. ДвигаСмся ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°. Если ΠΊΠΎΠ½Π΅Ρ† ΠΏΡƒΡ‚ΠΈ β€” это искомая Π²Π΅Ρ€ΡˆΠΈΠ½Π°, ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ. Если Π½Π΅Ρ‚, возвращаСмся Π½Π°Π·Π°Π΄ ΠΈ двигаСмся ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ исслСдуСм всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

ΠœΡ‹ слСдуСм этому Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ посСщСнной Π²Π΅Ρ€ΡˆΠΈΠ½Π΅.

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ повторСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования рСкурсии для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°: этот ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ DFS-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅. DFS ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… цСлях. ΠžΡ‚ этих Ρ†Π΅Π»Π΅ΠΉ зависит Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, общая концСпция выглядит ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ.

Анализ DFS

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ «сосСда» ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, игнорируя Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… посСщали Ρ€Π°Π½Π΅Π΅, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ врСмя выполнСния, Ρ€Π°Π²Π½ΠΎΠ΅ O(V + E).

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ объяснСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ V+E:

V β€” ΠΎΠ±Ρ‰Π΅Π΅ количСство Π²Π΅Ρ€ΡˆΠΈΠ½. E β€” ΠΎΠ±Ρ‰Π΅Π΅ количСство Π³Ρ€Π°Π½Π΅ΠΉ (Ρ€Π΅Π±Π΅Ρ€).

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ V*E, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ V*E.

V*E ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ всС Π³Ρ€Π°Π½ΠΈ Π³Ρ€Π°Ρ„Π° Π±Π΅Π·ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ принадлСТности этих Π³Ρ€Π°Π½Π΅ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, V+E ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΡ‹ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ лишь ΠΏΡ€ΠΈΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΊ Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, каТдая Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство Π³Ρ€Π°Π½Π΅ΠΉ ΠΈ, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, ΠΌΡ‹ ΠΎΠ±ΠΎΠΉΠ΄Π΅ΠΌ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ (O(V)) ΠΈ исслСдуСм всС Π³Ρ€Π°Π½ΠΈ (O(E)). ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ V Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ E Π³Ρ€Π°Π½Π΅ΠΉ, поэтому ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ V+E.

Π”Π°Π»Π΅Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стСк (бСсконСчная рСкурсия ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС пСрСполнСния стСка). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ составляСт O(V).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим BFS.

Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

BFS слСдуСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Β«Ρ€Π°ΡΡˆΠΈΡ€ΡΠΉΡΡ, поднимаясь Π½Π° высоту ΠΏΡ‚ΠΈΡ‡ΡŒΠ΅Π³ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π°Β» (Β«go wide, bird’s eye-viewΒ»). ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, BFS ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ сосСду Π·Π° Ρ€Π°Π·. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ВмСсто слСдования ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ, BFS ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ посСщСниС Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… ΠΊ s сосСдСй Π·Π° ΠΎΠ΄Π½ΠΎ дСйствиС (шаг), Π·Π°Ρ‚Π΅ΠΌ посСщСниС сосСдСй сосСдСй ΠΈ Ρ‚Π°ΠΊ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ t.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π§Π΅ΠΌ DFS отличаСтся ΠΎΡ‚ BFS? МнС нравится Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ DFS ΠΈΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€ΠΎΠ»ΠΎΠΌ, Π° BFS Π½Π΅ торопится, Π° ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ всС Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ шага.

Π”Π°Π»Π΅Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΡ… сосСдСй слСдуСт ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ?

Для этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ Β«ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ вошСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»Β» (first-in-first-out, FIFO) ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (queue). ΠœΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сначала Π±Π»ΠΈΠΆΠ°ΠΉΡˆΡƒΡŽ ΠΊ Π½Π°ΠΌ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Π·Π°Ρ‚Π΅ΠΌ Π΅Π΅ нСпосСщСнных сосСдСй, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ этот процСсс, ΠΏΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ опустССт ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΈΡΠΊΠΎΠΌΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ.

Анализ BFS

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ BFS Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. Однако Ссли Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ визуализациям, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ врСмя выполнСния.

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ достиТСниСм ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, BFS исслСдуСт всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ Π³Ρ€Π°Π½ΠΈ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ BFS ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ быстрСС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими Π³Ρ€Π°Ρ„Π°ΠΌΠΈ обнаруТиваСтся, Ρ‡Ρ‚ΠΎ DFS Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° слСдованиС ΠΏΠΎ путям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΆΠ½Ρ‹ΠΌΠΈ. BFS часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для нахоТдСния ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, врСмя выполнСния BFS Ρ‚Π°ΠΊΠΆΠ΅ составляСт O(V + E), Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΡƒΡŽ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, Π΅Π³ΠΎ пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ составляСт O(V).

Аналогии ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ

Если ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, Ρ‚ΠΎ Π²ΠΎΡ‚ ΠΊΠ°ΠΊ я ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ сСбС Ρ€Π°Π±ΠΎΡ‚Ρƒ DFS ΠΈ BFS.

Когда я Π΄ΡƒΠΌΠ°ΡŽ ΠΎ DFS, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ сСбС ΠΌΡ‹ΡˆΡŒ Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅ Π² поисках Π΅Π΄Ρ‹. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΊ Ρ†Π΅Π»ΠΈ ΠΌΡ‹ΡˆΡŒ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· ΡƒΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΡƒΠΏΠΈΠΊ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ, ΠΈ Ρ‚Π°ΠΊ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° ΠΈΠ»ΠΈ Π΅Π΄Ρƒ.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

УпрощСнная вСрсия выглядит Ρ‚Π°ΠΊ:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΊΠΎΠ³Π΄Π° я Π΄ΡƒΠΌΠ°ΡŽ ΠΎ BFS, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ сСбС ΠΊΡ€ΡƒΠ³ΠΈ Π½Π° Π²ΠΎΠ΄Π΅. ПадСниС камня Π² Π²ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ возмущСния (ΠΊΡ€ΡƒΠ³ΠΎΠ²) Π²ΠΎ всСх направлСниях ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

УпрощСнная вСрсия выглядит Ρ‚Π°ΠΊ:

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ «Поиск Π² ΡˆΠΈΡ€ΠΈΠ½ΡƒΒ», «ВынСсти ΠΊΠ»Π°Π΄!Β» ΠΈ Β«ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΡŽ!Β»

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ содСрТит Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой, этой ΠΈ этой Π·Π°Π΄Π°Ρ‡ΠΈ с ulearn.me. Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΊΠΎΠ΄-Ρ€Π΅Π²ΡŒΡŽ Ρƒ прСподаватСля (Π±Π°Π»Π»Ρ‹: 50/50, 100/100, 50/50). ВсС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ курса Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π»Π» Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… рСпозиториях. Π’Π΅Ρ‚ΠΊΠ° unsolved содСрТит ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° «Поиск Π² ΡˆΠΈΡ€ΠΈΠ½ΡƒΒ»

Для этого Π² классС BfsTask Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ сигнатурой. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΎΠ½ Π²Π°ΠΌ понадобится ΠΈ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ!

ПослС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ выполнСния задания, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠšΠ»ΠΈΠΊΠ½ΡƒΠ² Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ ячСйку Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ вашим Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΏΡƒΡ‚ΡŒ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° «ВынСсти ΠΊΠ»Π°Π΄!Β»

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ ΠΈ Π²Ρ‹ Π² настоящСм Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅ с сокровищами! Π‘ΠΈΠ» Ρ…Π²Π°Ρ‚ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ сундук ΠΈ Ρ‚ΠΎ Π΅Π»Π΅-Π΅Π»Π΅. НайдитС ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π°, проходящий Ρ‡Π΅Ρ€Π΅Π· хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ сундук.

ПослС выполнСния этого задания, ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡƒΡ‚ΠΈ. ΠΠ°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ сокровищами!

Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ элСгантно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π±Π΅Π· Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ LINQ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Β«ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΡŽ!Β»

Оказалось, Ρ‡Ρ‚ΠΎ Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ…ΠΎΡ‚Π½ΠΈΠΊΠΈ Π·Π° сокровищами. ЕстСствСнно, ΠΊΡ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ добСрСтся Π΄ΠΎ сундука, Ρ‚ΠΎΡ‚ Π΅Π³ΠΎ ΠΈ Π·Π°Π±Π΅Ρ€Π΅Ρ‚ сСбС.

НСплохо Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΈΠ· сопСрников Π΄ΠΎ ΠΊΠ°ΠΊΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° успССт Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ быстрСС Π΄Ρ€ΡƒΠ³ΠΈΡ….

Π’ классС RivalsTask Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌΠΈ.

НуТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π΄ΠΎ ΠΊΠ°ΠΊΠΈΡ… ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΎΠΊ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠΊ смоТСт Π΄ΠΎΠΉΡ‚ΠΈ быстрСС, Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. Π₯одят ΠΈΠ³Ρ€ΠΎΠΊΠΈ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, начиная с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС тСсты Π² классС Rivals_Should ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ.

ПослС выполнСния этого задания, ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ процСсса Ρ€Π°Π·Π΄Π΅Π»Π° ΠΊΠ°Ρ€Ρ‚Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (Breadth first search, BFS)

Алгоритм BFS

Бтандартная рСализация Π’FS ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π³Ρ€Π°Ρ„Π° Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ:

Алгоритм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π“Ρ€Π°Ρ„ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ нСсвязанныС части, поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ BFS Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ BFS

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ «поиска Π² ΡˆΠΈΡ€ΠΈΠ½ΡƒΒ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ с 5 Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 0, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ BFS начинаСтся с помСщСния Π΅Π³ΠΎ Π² список посСщСнных ΠΈ размСщСния всСх смСТных Π²Π΅Ρ€ΡˆΠΈΠ½ Π² стСкС.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ посСщаСм элСмСнт Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 1, ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ сосСдним ΡƒΠ·Π»Π°ΠΌ. Π’Π°ΠΊ ΠΊΠ°ΠΊ 0 ΡƒΠΆΠ΅ Π±Ρ‹Π» посСщСн, ΠΌΡ‹ посСщаСм 2.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π£ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 2 Π΅ΡΡ‚ΡŒ сосСдняя Π½Π΅ посСщСнная Π²Π΅Ρ€ΡˆΠΈΠ½Π° 4, поэтому ΠΌΡ‹ добавляСм Π΅Π΅ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ посСщаСм 3, которая находится Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 4, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ СдинствСнный сосСдний ΡƒΠ·Π΅Π» с 3, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 0, ΡƒΠΆΠ΅ посСщСн. ΠœΡ‹ посСщаСм Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ 4.

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ пуста, ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°.

BFS псСвдокод

Код BFS

Код для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° «поиска Π² ΡˆΠΈΡ€ΠΈΠ½ΡƒΒ» с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. Код Π±Ρ‹Π» ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅, Π° Π½Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… дСталях.

BFS Π² C

BFS Π² C++

BFS Java ΠΊΠΎΠ΄ (Java code)

BFS Π² Python

ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ хостинг TIMEWEB

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *