Tuman & Pointer
Pointer Pointer
Ну Ρ‡Ρ‚ΠΎ, Π’ΡƒΠΌΠ°Π½, я Ρ‚ΡƒΡ‚ ковырялся с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ поиска ΠΏΡƒΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° сСткС с динамичСскими прСпятствиями – ΠΊΠ°ΠΊ Π±Ρ‹, стСлс-вСрсия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ДСйкстры. Как Ρ‚Ρ‹ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΡˆΡŒΡΡ Π² мСстах, Π³Π΄Π΅ тСбя практичСски Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ? Π•ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² Ρ‡Π΅Ρ‚ΠΊΡƒΡŽ, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ?
Tuman Tuman
МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ "Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ" ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π·Π°Ρ‚Ρ€Π°Ρ‚. Π”Π°ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ полю Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ пСрСмСщСния, Π° Π·Π°Ρ‚Π΅ΠΌ добавляй ΡˆΡ‚Ρ€Π°Ρ„, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ растёт Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ источников свСта ΠΌΠΎΠ³ΡƒΡ‚ Π΅Π³ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. Если прСпятствия Π΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ послСдних Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Π΄Ρ€ΠΎΠ² ΠΈ пСрСстраивай Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнились. Быстрый Ρ‚Ρ€ΡŽΠΊ – Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ видимости для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля – просто битовая маска, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ Π΅Π³ΠΎ видят. Π—Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, Ρ‚Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ, маска ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ двиТущССся прСпятствиС. ΠŸΡ€ΠΈ поискС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ A* вмСсто простого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ДСйкстры: эвристикой ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ расстояниС ΠΏΠΎ прямой Π΄ΠΎ Ρ†Π΅Π»ΠΈ, Π½ΠΎ Ссли Π½ΡƒΠΆΠ½Π° ΡΠΊΡ€Ρ‹Ρ‚Π½ΠΎΡΡ‚ΡŒ, добавь Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ константу, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒ поиск ΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°ΠΌ с мСньшим ΡˆΡ‚Ρ€Π°Ρ„ΠΎΠΌ. Π”Π΅Ρ€ΠΆΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² нСбольшой, отбрасывая ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π» с мСньшСй ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ. Если Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ±Π΅Ρ€Π½ΠΈ всё это Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ сСтку, список динамичСских прСпятствий ΠΈ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ. Π’Π½ΡƒΡ‚Ρ€ΠΈ пСрСстрой сСтку стоимости, запусти поиск A*, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉ ΠΏΡƒΡ‚ΡŒ. Π“Π»Π°Π²Π½ΠΎΠ΅ – Π΄Π΅Π»Π°ΠΉ сСтку стоимости дСшСвой: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ цСлочислСнныС значСния, ΠΈΠ·Π±Π΅Π³Π°ΠΉ чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΈ обновляй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ поля. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ "нСвидимая" Ρ‡Π°ΡΡ‚ΡŒ – нСбольшиС, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ обновлСния, Π±Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… пСрСсчСтов.
Pointer Pointer
ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΡ‘ΠΌ с Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ маской ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ обновлСния Π½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Волько ΡƒΠ±Π΅Π΄ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ…Π΅ΡˆΠΈΡ€ΡƒΠ΅ΡˆΡŒ маски, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° пСрСсСчСниС O(n). И ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉ ΠΏΡ€ΠΎ Π»Π΅Π½ΠΈΠ²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ – это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΊΡƒΡ‡Π΅ΠΉ Π² O(log n), Π΄Π°ΠΆΠ΅ Ссли Ρ‚Ρ‹ агрСссивно ΠΎΠ±Ρ€Π΅Π·Π°Π΅ΡˆΡŒ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ чистый ΠΈ ΠΌΠ°Π»ΠΎΠ·Π°Π΄Π΅Ρ€ΠΆΠ΅Ρ‡Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.