Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

Алгоритм DFS (Β«Depth-first searchΒ» ΠΈΠ»ΠΈ «Поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½ΡƒΒ»)

Алгоритм DFS

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ DFS

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

Π£ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 2 Π΅ΡΡ‚ΡŒ Π½Π΅ посСщСнная смСТная Π²Π΅Ρ€ΡˆΠΈΠ½Π° 4, поэтому ΠΌΡ‹ добавляСм Π΅Π΅ Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ стСка ΠΈ посСщаСм.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ посСтим послСдний элСмСнт 3, Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ Π½Π΅ посСщСнных смСТных ΡƒΠ·Π»ΠΎΠ². На этом ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Β«ΠΎΠ±Ρ…ΠΎΠ΄ Π² Π³Π»ΡƒΠ±ΠΈΠ½ΡƒΒ» Π³Ρ€Π°Ρ„Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

ПсСвдокод DFS (рСкурсивная рСализация)

ПсСвдокод для DFS ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ init() ΠΌΡ‹ запускаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DFS Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Ρ„ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ нСсвязанныС части, поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ DFS Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅.

Код DFS

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

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

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

Поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (Π°Π½Π³Π». depth-first search, DFS) – это рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π°. Если ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ производился симмСтрично (Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π° ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΏΠΎ уровням), Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Π³Π»ΡƒΠ±ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ дальнСйшСго продвиТСния, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° послСдний, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² двиТСния (ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… исслСдован ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ), Ρ€Π°Π½Π΅Π΅ посСщСнный ΡƒΠ·Π΅Π» (Π²Π΅Ρ€ΡˆΠΈΠ½Π°).

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ послСднСго ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ситуаций: Π»ΠΈΠ±ΠΎ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π° ΡƒΠΆΠ΅ просмотрСны, Π»ΠΈΠ±ΠΎ просмотрСны всС Ρ‚Π΅, Ρ‡Ρ‚ΠΎ доступны ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, взятой Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π½Π΅ всС (нСсвязныС ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π³Ρ€Π°Ρ„Ρ‹ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ послСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚).

Рассмотрим Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ связный Π³Ρ€Π°Ρ„ ΠΈΠΌΠ΅Π΅Ρ‚ Π² суммС 5 Π²Π΅Ρ€ΡˆΠΈΠ½. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поискаБначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ. Какая Π±Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π² качСствС Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ Π½Π΅ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π°, Π³Ρ€Π°Ρ„ Π² любом случаС исслСдуСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, это связный Π³Ρ€Π°Ρ„ Π±Π΅Π· Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Π±Ρ€Π°.
ΠŸΡƒΡΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄ начнСтся с ΡƒΠ·Π»Π° 1, Ρ‚ΠΎΠ³Π΄Π° порядок ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ просмотрСнных ΡƒΠ·Π»ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ: 1 2 3 5 4. Если Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΡƒΠ·Π»Π° 3, Ρ‚ΠΎ порядок ΠΎΠ±Ρ…ΠΎΠ΄Π° окаТСтся ΠΈΠ½Ρ‹ΠΌ: 3 2 1 5 4.

Алгоритм поиска Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ базируСтся Π½Π° рСкурсии, Ρ‚. Π΅. функция ΠΎΠ±Ρ…ΠΎΠ΄Π°, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ выполнСния, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама сСбя, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π² Ρ†Π΅Π»ΠΎΠΌ довольно ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ.

ПсСвдокод Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

Π—Π΄Π΅ΡΡŒ DFS (depth-firstsearch) – Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ЕдинствСнный Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ st – стартовый ΡƒΠ·Π΅Π», ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· элСмСнтов логичСского массива visited Π·Π°Ρ€Π°Π½Π΅Π΅ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Ρ‚. Π΅. каТдая ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½Π΅ посСщСнная.

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив graph – это ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности Π³Ρ€Π°Ρ„Π°. Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ внимания слСдуСт ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° послСднСй строкС. Если элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ Ρ‚ΠΎ шагС Ρ€Π°Π²Π΅Π½ 1 (Π° Π½Π΅ 0) ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π° с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ провСряСмый столбСц ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈ этом Π½Π΅ Π±Ρ‹Π»Π° посСщСна, Ρ‚ΠΎ функция рСкурсивно повторяСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС функция возвращаСтся Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΡΡ‚Π°Π΄ΠΈΡŽ рСкурсии.

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

ΠžΠ±Ρ…ΠΎΠ΄ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Ρ†Π²Π΅Ρ‚Π° Π²Π΅Ρ€ΡˆΠΈΠ½

ΠžΠ±Ρ…ΠΎΠ΄ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Π°Π½Π³Π». Depth-First Search, DFS) β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±Ρ…ΠΎΠ΄Π° Π³Ρ€Π°Ρ„Π°, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ связности, поиска Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сильной связности ΠΈ для топологичСской сортировки.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Алгоритм [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠžΠ±Ρ‰Π°Ρ идСя [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠžΠ±Ρ‰Π°Ρ идСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ всС Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ смСТныС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ поиск для Π½ΠΈΡ….

ПошаговоС прСдставлСниС [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

РСализация [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π’ массивС [math]\mathrm[/math] хранится информация ΠΎ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ….

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π¦Π²Π΅Ρ‚Π° Π²Π΅Ρ€ΡˆΠΈΠ½ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, простой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ «Π±Ρ‹Π»ΠΈ/Π½Π΅ Π±Ρ‹Π»ΠΈ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅» Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² процСссС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌ Π·Π°Π΄Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π°:

Π’Π°ΠΊΠΈΠ΅ «ΠΌΠ΅Ρ‚ΠΊΠΈ» Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ поискС Ρ†ΠΈΠΊΠ»Π°.

РСализация [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Рассмотрим, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ†Π²Π΅Ρ‚Π° Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°.

Π”Π΅Ρ€Π΅Π²ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

Алгоритм [math]\mathrm[/math] ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ€Π΅Π±Ρ€Π°. ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ€Π΅Π±Ρ€ΠΎ [math](u, v)[/math] ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ†Π²Π΅Ρ‚Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ [math]v[/math] ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π΅Π³ΠΎ исслСдовании, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

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

Алгоритмы Π½Π° Π³Ρ€Π°Ρ„Π°Ρ… β€” Π§Π°ΡΡ‚ΡŒ 1: Поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

НСдавно Π½Π° Π₯Π°Π±Ρ€Π΅ Π±Ρ‹Π»Π° ΡΡ‚Π°Ρ‚ΡŒΡ, посвящСнная Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ Π½Π° Π³Ρ€Π°Ρ„Π°Ρ…. Π‘ позволСния Π°Π²Ρ‚ΠΎΡ€Π°, ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ…Π°Π±Ρ€Π°Ρ‚ΠΎΠΏΠΈΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ†ΠΈΠΊΠ».

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ вопросы примСнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ программирования.
Достаточно ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ сталкивался Π½Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ β€” это deadlock. По сути deadlock – это Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ систСма, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΎΠ΄ΠΈΠ½ рСсурс.
Π’ ΠΆΠΈΠ·Π½ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ситуации Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΆΠ΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π½Π° Π²Ρ…ΠΎΠ΄Π΅, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π² Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. Однако послС 3-4 Ρ„Ρ€Π°Π· Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС вас!Β», ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ всё ΠΆΠ΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.
На ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния всё слоТнСС, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ способны Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ Ρ„Ρ€Π°Π·Ρ‹ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС вас!Β» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.
Как ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ систСма ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° этот процСсс? Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΈ приходят Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° Π³Ρ€Π°Ρ„Π°Ρ….
Для Π½Π°Ρ‡Π°Π»Π° опрСдСлимся, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ элСмСнтами нашСго Π³Ρ€Π°Ρ„Π°, ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Β«ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉΒ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наш ΠΊΠΎΠ΄ ΠΈ систСма Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π² этом случаС, ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ соСдинСния Π±ΡƒΠ΄Π΅Π½ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ запрос ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ довСряСт этому ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ΠΎΠΌ. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΊΠΎΠ΄ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚ Β«OKΒ», Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ сообщСний Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

Π’Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄ΡƒΠ³Π°ΠΌΠΈ – внСшниС запросы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для продолТСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΠ·Π»Π°.
ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€, ΠΊΠ°ΠΊ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² саму сСбя. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π° нашСм Π³Ρ€Π°Ρ„Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возникший deadlock.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ для Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания самого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.
1. ΠŸΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΡƒΠ΅ΠΌ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π°
2. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π°, ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹Π΅
3. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ всС Π΄ΡƒΠ³ΠΈ Π³Ρ€Π°Ρ„Π°, ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹Π΅
4. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π³Ρ€Π°Ρ„Π° Π² стСк
5. Пока стСк Π½Π΅ пуст, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ (Π½Π΅ выталкивая) ΠΈΠ· стСка послСднюю Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Find(Node V)
6. Если стСк пуст, Π½ΠΎ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² стСк Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Π½ΠΎΠ²Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΏ.5

Π“Π΄Π΅ D.LinkNode β€” Π²Π΅Ρ€ΡˆΠΈΠ½Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΡƒΠ³Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ понадобится ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для Π³Ρ€Π°Ρ„Π° ΠΈ Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½

public class GraphNode
<
public bool New;
public List Links;
>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ класс, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ поиск ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²

public static class PathFinder
<
static List list;
static List List > paths;

public static List List > Find(Graph graph)
static void InternalFind(GraphNode node)
>

И, собствСнно, наши основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

static List List > Find(Graph graph)
<
list = new List (); //Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ стСк
paths = new List List >(); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ список ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²

foreach (GraphNode node in graph.Nodes)
<
node.New = true ;
>

list.Add(graph.Nodes[0]); //ДобавляСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ для Π½Π°Ρ‡Π°Π»Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

// Поиск ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π½ΠΎΠ²Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½
done = true ;
foreach (GraphNode node in graph.Nodes)
<
if (node.New)
<
list.Add(node);
done = false ;
break ;
>
>
>
return paths;
>

Π‘Ρ‚Π΅ΠΊ Π±Ρ‹Π» Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ списком, Ρ‚.ΠΊ. Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°, Π½Π΅ выталкивая элСмСнты

static void InternalFind(GraphNode node)
<
node.New = false ;

foreach (GraphNode nextNode in node.Links) //Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ всСм Π΄ΡƒΠ³Π°ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹
<
if (nextNode.New)
<
list.Add(nextNode);
InternalFind(nextNode);
>

for ( int i = firstElement; i

ГрафичСски, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

Из Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Β«0Β», которая являСтся Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ, ΠΌΡ‹ двиТСмся Π²Π½ΠΈΠ·, Ссли Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ шагС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄ΡƒΠ³Ρƒ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Π½Π°Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽΡΡ Π² стСкС (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π΄ΡƒΠ³Π° исходит ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Β«4Β»), ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ стСка образуСтся ΠΊΠΎΠ½Ρ‚ΡƒΡ€ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: 0-2-3-4-5-0), соотвСтствСнно, Ссли Π΄ΡƒΠ³Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡƒΠΆΠ΅ Π½Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Π½ΠΎ ΡƒΠΆΠ΅ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡƒΡŽ ΠΈΠ· стСка (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Β«1Β»), ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚.

Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ извСстСн ΠΊΠ°ΠΊ поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ Π² ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π³Ρ€Π°Ρ„Π΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ срСдС остаётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ, пСриодичСски, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.
Как Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ с Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ? Иногда deadlock Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄, Π² любом случаС, это ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· (с ΠΌΠΎΠ΅ΠΉ стороны) – Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ топологичСской сортировки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² Ρ‚ΠΎΠΌ числС, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ ΠΏΡ€ΠΈ компиляции ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ†Π΅ΠΏΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ Π½Π΅ΠΉΡ€ΠΎΠ½ΠΎΠ² Π² нСйросСти.

UPD: Π”ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°
UPD2: ΠŸΠ΅Ρ€Π΅Π½Π΅Ρ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, спасибо

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

ΠžΠ±Ρ…ΠΎΠ΄ Π³Ρ€Π°Ρ„Π°: поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΈ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ простыми словами Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 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, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ сСбС ΠΊΡ€ΡƒΠ³ΠΈ Π½Π° Π²ΠΎΠ΄Π΅. ПадСниС камня Π² Π²ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ возмущСния (ΠΊΡ€ΡƒΠ³ΠΎΠ²) Π²ΠΎ всСх направлСниях ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска

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

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

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

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