ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€Ρ‹ «крСстики-Π½ΠΎΠ»ΠΈΠΊΠΈΒ»

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Быстрота Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠžΡ‚ Π±Ρ‹ΡΡ‚Ρ€ΠΎΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ зависит, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Ρ†Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Для увСличСния скорости написания Windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСдства Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Code Gear/Builder C++ ΠΊΠ°ΠΊ нСльзя Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для выполнСния Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Code Gear/Builder C++ — быстрая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (RAD — Rapid Application… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€Ρ‹ «крСстики-Π½ΠΎΠ»ΠΈΠΊΠΈΒ» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области
  • ОбоснованиС Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ
  • ОписаниС примСняСмого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°
  • Π‘Π»ΠΎΠΊ-схСма ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°
  • ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Π’Ρ‹Π²ΠΎΠ΄Ρ‹
  • Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

крСстики Π½ΠΎΠ»ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

Π”Π°Π½ΠΎ бСсконСчноС ΠΏΠΎΠ»Π΅ (n*n, Π³Π΄Π΅ n = 1…65 536) для ΠΈΠ³Ρ€Ρ‹ Π² «ΠΊΡ€Π΅ΡΡ‚ΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈ».

НСобходимо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ поиск Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ…ΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ минимаксный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

БСсконСчноС ΠΏΠΎΠ»Π΅ — тСорСтичСски бСсконСчноС ΠΏΠΎΠ»Π΅ (фактичСски ΠΏΠΎΠ»Π΅ n*n, Π³Π΄Π΅ n = 1…65 536).

ΠšΠ»Π΅Ρ‚ΠΊΠ° — минимальная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ состоит ΠΏΠΎΠ»Π΅.

ΠšΡ€Π΅ΡΡ‚ΠΈΠΊ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ своСго Ρ…ΠΎΠ΄Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 1 ΠΊΠ»Π΅Ρ‚ΠΊΡƒ поля.

Нолик — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ своСго Ρ…ΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 1 ΠΊΠ»Π΅Ρ‚ΠΊΡƒ поля.

Π˜Π³Ρ€ΠΎΠΊ — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… участников ΠΈΠ³Ρ€Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ крСстиком ΠΈΠ»ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΎΠΌ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ…ΠΎΠ΄Π°.

ОбоснованиС Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ

Π’Ρ‹Π±ΠΎΡ€ языка программирования ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ нСпосрСдствСнноС влияниС Π½Π° Π±Ρ‹ΡΡ‚Ρ€ΠΎΡ‚Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ срСды программирования для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° IDE Code Gear ΠΈ ΡΠ·Ρ‹ΠΊ программирования C++ (Code Gear/Builder C++), ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ наслСдником Borland C++ Builder.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Code Gear/Builder C++ с Π΅Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСдактирования, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для написания Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Ρ… 32/64-разрядных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ популярный язык программирования Π‘++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Code Gear/Builder C++:

Β· полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Unicode. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Π»ΡŽΠ±ΠΎΠΉ языковой вСрсии Windows. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Unicode Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ прилоТСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²ΡΠ΅Ρ… языковых вСрсиях Windows ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Unicode-строки, Ρ‚Π°ΠΊ ΠΈ ANSI-строки.

Β· Π½ΠΎΠ²Ρ‹Π΅ элСмСнты языков программирования, Π² Ρ‚ΠΎΠΌ числС Generics ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для C++, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ возмоТности для Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°;

Β· новая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° VCL Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ мноТСство ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для создания Ρ€Π°Π·Π²ΠΈΡ‚ΠΎΠ³ΠΎ графичСского интСрфСйса;

Β· Π²Π΅Π±-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° VCL позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π±-прилоТСния с Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΌ интСрфСйсом с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ AJAX;

Β· ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ сообщСний ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС;

Β· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… благодаря входящСму Π² ΡΠΎΡΡ‚Π°Π² Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Builder Architect ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ срСдства модСлирования Embarcadero ER/Studio. [9]

ОбоснованиСм Π²Ρ‹Π±ΠΎΡ€Π° слуТат ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹:

Быстрота Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠžΡ‚ Π±Ρ‹ΡΡ‚Ρ€ΠΎΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ зависит, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Ρ†Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Для увСличСния скорости написания Windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСдства Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Code Gear/Builder C++ ΠΊΠ°ΠΊ нСльзя Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для выполнСния Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Code Gear/Builder C++ - быстрая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (RAD — Rapid Application Development). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Code Gear/Builder C++ - Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ процСсс проСктирования, с Π²Π΅ΡΡŒΠΌΠ° нСбольшим количСством фактичСского программирования, Ρ‡Ρ‚ΠΎ сущСствСнно сокращаСт врСмя Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ интСрфСйса, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ стандартам Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Code Gear/Builder C++ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 32/64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, обСспСчивая Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния.

Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π·Π°Π΄Π°Ρ‡ΠΈ. РассматриваСмая Π² Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π° относится ΠΊ Ρ€Π°Π·Ρ€ΡΠ΄Ρƒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΡΠΎΡΡ‚Π°Π² Code Gear/Builder C++ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ высокоэффСктивный компилятор с ΡΠ·Ρ‹ΠΊΠ° C++, основанном Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π”Π°Π½Π½Ρ‹ΠΉ компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Code Gear/Builder C++ создаСт Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ для исполнСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для увСличСния быстродСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ объСма Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ….

Доступ ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ срСдствам. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ доступа ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ срСдствам Π­Π’Πœ, поэтому отсутствуСт Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° языка Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Π΅Π΅ Ρ‡Π°ΡΡ‚Π΅ΠΉ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ «ΠšΠ»ΠΈΠ΅Π½Ρ‚ — Π‘Π΅Ρ€Π²Π΅Ρ€». Π’ Π½Π°ΡΡ‚оящСС врСмя ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π²Π΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы. Code Gear/Builder C++ прСдоставляСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ‚Ρ€Π΅Ρ…Π·Π²Π΅Π½Π½ΡƒΡŽ систСму, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ «Ρ‚ΠΎΠ½ΠΊΠΈΠΉ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚, сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, срСда программирования Code Gear/Builder C++ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ:

обСспСчиваСт простоту написания Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй прилоТСния, Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСния скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ срСдствами Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ построСния интСрфСйса;

ОписаниС примСняСмого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

Алгоритм минимакс основан Π½Π° Π²Ρ‹Π±ΠΎΡ€Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ…ΠΎΠ΄Π° с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ этот Ρ…ΠΎΠ΄ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ ΡˆΠ°Π½ΡΡ‹ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. Для этого происходит просчСт всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ…ΠΎΠ΄ΠΎΠ² Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΎΡ†Π΅Π½ΠΎΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля, с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ шагС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ.

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

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

1. Бтроится ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° стратСгий. Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ исходам. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΌ стратСгиям. Π’ ΡΡ‡Π΅ΠΉΠΊΠΈ записываСтся ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΌ исходС ΠΈ ΠΏΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ стратСгии.

2. Бтроится ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° соТалСния. Π’ ΡΡ‡Π΅ΠΉΠΊΠ°Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° соТалСния — Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΌ исходС (максимальном числС Π² Π΄Π°Π½Π½ΠΎΠΌ столбцС) ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ стратСгии. Π‘ΠΎΠΆΠ°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Ρ‚Π΅Ρ€ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΈ принятии Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

3. МинимаксноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ соотвСтствуСт стратСгии, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ максимальноС соТалСниС минимально. Для этого для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стратСгии (Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС) ΠΈΡ‰ΡƒΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ соТалСния. И Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (строку), максимальноС соТалСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ минимально.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° минимакс ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³Ρ€Π°Ρ„Π°:

ОпишСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

ПолС n*m, Π³Π΄Π΅ n — количСство ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, m — количСство ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

weights[i, j] - вСс поля i, j (ΠΎΡ†Π΅Π½ΠΊΠ°) Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹.

size — Π΄Π»ΠΈΠ½Π° Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.

depth — Π³Π»ΡƒΠ±ΠΈΠ½Π° минимаксного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΡ†Π΅Π½ΠΎΠΊ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму:

Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ линию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ 1-ΠΎΠΉ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ — 2 ΠΎΡ‡ΠΊΠ°.

Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ линию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ 2-Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΊΠΈ — 4 ΠΎΡ‡ΠΊΠ°.

Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ линию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ 3-ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΊΠΈ — 8 ΠΎΡ‡ΠΊΠΎΠ².

Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ линию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ size — 1 Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ — 2size-1 ΠΎΡ‡ΠΊΠΎΠ².

Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ линию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ size Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ — 2size ΠΎΡ‡ΠΊΠΎΠ².

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π° Π³Π»ΡƒΠ±ΠΈΠ½Π΅ depth ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ AI, ΠΈ Π½Π° ΡˆΠ°Π³Π΅ depth-1 Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ. На ΡˆΠ°Π³Π΅ depth-2 ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π³Π»ΡƒΠ±ΠΈΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ = 1. ПослС Ρ‡Π΅Π³ΠΎ выбираСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π°Ρ ΠΎΡ†Π΅Π½ΠΊΠ° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся Ρ…ΠΎΠ΄ AI.

ΠΠ»ΡŒΡ„Π°-Π±Π΅Ρ‚Π° отсСчСниС. ΠΠ»ΡŒΡ„Π°-Π±Π΅Ρ‚Π° отсСчСниС (Π°Π½Π³Π». Alpha-beta pruning) — это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска, стрСмящийся ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство ΡƒΠ·Π»ΠΎΠ², ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π² Π΄Π΅Ρ€Π΅Π²Π΅ поиска Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ минимакс. Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для антагонистичСских ΠΈΠ³Ρ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся для машинной ΠΈΠ³Ρ€Ρ‹ (Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π°Ρ…, Π³ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…). Π’ ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π»Π΅ΠΆΠΈΡ‚ идСя, Ρ‡Ρ‚ΠΎ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚Π²ΠΈ Π΄Π΅Ρ€Π΅Π²Π° поиска ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ досрочно ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ (Π±Π΅Π· вычислСния всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), Ссли Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ для этой Π²Π΅Ρ‚Π²ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π»ΡŽΠ±ΠΎΠΌ случаС Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ вычислСнноС для ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΠΈ. ΠΠ»ΡŒΡ„Π°-Π±Π΅Ρ‚Π° отсСчСниС являСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ся.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ Π°Π»ΡŒΡ„Π°-Π±Π΅Ρ‚Π° отсСчСния фактичСски Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΏΠΎΠ΄ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π΄Π΅Ρ€Π΅Π²Π° поиска ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ уровня рассмотрСна ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π’Π°ΠΊ ΠΊΠ°ΠΊ отсСчСния происходят Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ влоТСнности (ΠΊΡ€ΠΎΠΌΠ΅ послСднСго), эффСкт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. На ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сущСствСнно влияСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ сортировка Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΈΠ»ΠΈ с ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ Π½Π° ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ) — ΠΏΡ€ΠΈ сортировкС Ρ‡Π΅ΠΌ большС Π² Π½Π°Ρ‡Π°Π»Π΅ рассмотрСно «Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ…» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‚Π΅ΠΌ большС «ΠΏΠ»ΠΎΡ…ΠΈΡ…» Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отсСчСно Π±Π΅Π· ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ минимаксного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° с Π°Π»ΡŒΡ„Π°-Π±Π΅Ρ‚Π° отсСчСниСм:

Π‘Π»ΠΎΠΊ-схСма ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

Алгоритм поиска Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π±Π»ΠΎΠΊ-схСмы:

Π‘Π»ΠΎΠΊ схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ findMin:

Π‘Π»ΠΎΠΊ схСма Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FindMax отличаСтся ΠΎΡ‚ FindMin Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°ΠΊΠΎΠΌ ΠΏΡ€ΠΈ сравнСниях.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования Π‘++ Π² ΡΡ€Π΅Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Code Gear.

Π’Ρ‹Π΄Π΅Π»Π΅Π½ основной класс ΠΈΠ³Ρ€Ρ‹: TCrossZero.

Бвойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

class TCrossZero {

public:

TCrossZero ();

~TCrossZero ();

int beginX, endX,

beginY, endY; // ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ поиска (см. FindBorder)

int size; // Π΄Π»ΠΈΠ½Π° Π²Ρ‹ΠΉΠ³Ρ€Π°ΡˆΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ

int n, m; // Ρ€Π°Π·ΠΌΠ΅Ρ€ поля

int** field; // ΠΏΠΎΠ»Π΅ боя, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

// -1 пустоС ΠΏΠΎΠ»Π΅

// 1 — крСстик

// 0 — Π½ΠΎΠ»ΠΈΠΊ

int** weights; // массив ΠΎΡ†Π΅Π½ΠΎΡ‡Π½Ρ‹Ρ… вСсов

int depth; // Π³Π»ΡƒΠ±ΠΈΠ½Π° поиска Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

int mode; // 1 — Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€

// 2 — Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ

// 3 — ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€-ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€

int now; // true — Ρ…ΠΎΠ΄ΠΈΡ‚ крСстик сСйчас

// false — Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ»ΠΈΠΊ

void setDelMem (int isSet); // Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅/освобоТдСниС памяти ΠΏΠΎΠ΄ массивы

// 0 — ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, 1 — Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ

int check (); // ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π»ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹?

// -1 — Π½Π΅Ρ‚

// 1 — Π²Ρ‹ΠΉΠ³Ρ€Π°Π»ΠΈ крСстики

// 0 — Π²Ρ‹ΠΉΠ³Ρ€Π°Π»ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΈ

// 2 — Π½ΠΈΡ‡ΡŒΡ

// просматриваСм Π΅ΡΡ‚ΡŒ сосСди Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ Π·Π½Π°ΠΊΠ° (крСстик, Π½ΠΎΠ»ΠΈΠΊ)

// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ check

// стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция Π±ΡƒΠ΄Π΅Ρ‚ рСкурсивной

// Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ сосСди ΠΈ ΠΈΡ… Ρ‡ΠΈΡΠ»ΠΎ <= size

// Ссли count = 0, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π²Ρ‹ΠΉΠ³Ρ€Π°Π»

int neighbor (

int direction, // Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ осмотра 1 — Π²ΠΏΡ€Π°Π²ΠΎ

// 2 — Π²ΠΏΡ€Π°Π²ΠΎ — Π²Π½ΠΈΠ·

// 3 — Π²Π½ΠΈΠ·

// 4 — Π²Π»Π΅Π²ΠΎ — Π²Π½ΠΈΠ·

int x,

int y, // Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡ‰Π΅ΠΌ сосСдСй

int count, // сколько ΡƒΠΆΠ΅ сосСдСй нашли

int who // ΠΊΡ‚ΠΎ сосСд?

// 0 — Π½ΠΎΠ»ΠΈΠΊ

// 1 — крСстик

);

// ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹

void NewGame (int new_n, int new_m, int new_size, int new_mode, int new_depth);

// Ρ…ΠΎΠ΄ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

// ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ var ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ int var res_x, res_y

void AI_turn (int who, int &res_x, int &res_y);

// who — Ρ‡Π΅ΠΌ Ρ…ΠΎΠ΄ΠΈΡ‚ AI (true — крСстик

// false — Π½ΠΎΠ»ΠΈΠΊ)

// res_x, res_y — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΡƒΠ΄Π° Ρ…ΠΎΠ΄ΠΈΡ‚

// нСпосрСдствСнно вСс считаСт эта функция (ΠΏΠΎ Π²ΡΠ΅ΠΌ направлСниям)

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ вСс Π΄Π°Π½Π½ΠΎΠΉ ячСйки для who

// подсчитаСм вСса Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°

int CalcWeight (int x, int y, int who);

// функция нахоТдСния ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°

int FindMin (int dep, int who, int alpha, int beta);

// функция нахоТдСния максимума

int FindMax (int dep, int who, int alpha, int beta);

int pow (int a, int n); // функция возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ

// ΠΈΠ±ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ коряво Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ стандартная Ρ„-ия

// ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ поиск Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

void FindBorder (int thickness);

// thickness — ΡˆΠΈΡ€ΠΈΠ½Π° ограничСния

};

ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π˜Π³Ρ€Π° происходит простыми Ρ‰Π΅Π»Ρ‡ΠΊΠ°ΠΌΠΈ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌΡƒ полю, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ помСчаСтся крСстиком ΠΈΠ»ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΎΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Ρ‡Π΅ΠΉ Ρ…ΠΎΠ΄.

Π’ ΡΡ‚ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°Ρ‡Π°Π»Π° ΠΈΠ³Ρ€Ρ‹:

Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΈ — это Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля.

Π”Π»ΠΈΠ½Π° ΠΏΠΎΠ±Π΅Π΄Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ — количСство крСстиком ΠΈΠ»ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΎΠ² Π² Ρ€ΡΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ Π² ΠΈΠ³Ρ€Π΅.

Π Π΅ΠΆΠΈΠΌ ΠΈΠ³Ρ€Ρ‹ опрСдСляСт Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Π°.

Π“Π»ΡƒΠ±ΠΈΠ½Π° поиска — количСство ΠΏΠΎΠ»ΡƒΡ…ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΡ€ΠΈ поискС Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ.

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

Π’ Ρ…ΠΎΠ΄Π΅ выполнСния курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΈΠ³Ρ€Ρ‹ Π² «ΠΊΡ€Π΅ΡΡ‚ΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈ», ΠΈΠ·ΡƒΡ‡Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Минимакс, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ оптимизация — Π°Π»ΡŒΡ„Π°-Π±Π΅Ρ‚Π° отсСчСниС.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ