Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π³Π»ΡΠ±ΠΈΠ½Π° ΠΏΠΎΠΈΡΠΊΠ°
ΠΠ»Π³ΠΎΡΠΈΡΠΌ 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]\mathrm
ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π½Π° Π³ΡΠ°ΡΠ°Ρ β Π§Π°ΡΡΡ 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, ΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡ ΡΠ΅Π±Π΅ ΠΊΡΡΠ³ΠΈ Π½Π° Π²ΠΎΠ΄Π΅. ΠΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ½Ρ Π² Π²ΠΎΠ΄Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΡΡΠ΅Π½ΠΈΡ (ΠΊΡΡΠ³ΠΎΠ²) Π²ΠΎ Π²ΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ ΠΎΡ ΡΠ΅Π½ΡΡΠ°.
Π£ΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:







