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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«ΠžΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌΒ»

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

ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Варнсдорфа: ΠŸΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ доски, конь слСдуСт Π½Π° Ρ‚Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ число Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ. Если Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ нСсколько, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ…. ЕдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅. НапримСр Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция void… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«ΠžΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌΒ» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π’Π’Π•Π”Π•ΠΠ˜Π•

1. Π‘Π˜Π‘Π’Π•ΠœΠΠ«Π™ ΠΠΠΠ›Π˜Π—

1.1 Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ситуации

1.2 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅ΠΉ

1.3 Поиск ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

1.4 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° эффСктивности Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

2. ΠΠΠΠ›Π˜Π— Π’Π Π•Π‘ΠžΠ’ΠΠΠ˜Π™

2.1 Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прСдставлСния

2.2 ВыявлСниС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ

2.2.1 ВрСбования ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ характСристикам

2.2.2 ВрСбования ΠΊ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΠΈ

3. ΠŸΠ ΠžΠ•ΠšΠ’Π˜Π ΠžΠ’ΠΠΠ˜Π•

3.1 ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ интСрфСйса

3.2 ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

4. ΠšΠžΠ”Π˜Π ΠžΠ’ΠΠΠ˜Π•

5. Π’Π•Π‘Π’Π˜Π ΠžΠ’ΠΠΠ˜Π•

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π―

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π’Π•Π”Π•ΠΠ˜Π•

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ставится Π·Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — ΠΎΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Π°Ρ доска Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N*N, Π³Π΄Π΅ N?50. МоТно Π»ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΅Π΅ ΠΊΠΎΠ½Π΅ΠΌ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ (h, v), ΠΏΠΎΠ±Ρ‹Π²Π°Π² ΠΏΡ€ΠΈ этом Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ Π² Ρ‚очности ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π²Π° случая: Π°) Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΎΠ±Ρ…ΠΎΠ΄Π° конь возвращаСтся Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. Π±) конь Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄ Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° визуализация процСсса ΠΈ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Π°Ρ дСмонстрация. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ разрабатываСтся Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования C++ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Microsoft Visual Studio 2008.

1. Π‘Π˜Π‘Π’Π•ΠœΠΠ«Π™ ΠΠΠΠ›Π˜Π—

1.1 Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ситуации Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ «ΠΎΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌ», с ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ этапа Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записки.

1.2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅ΠΉ ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ†Π΅Π»ΠΈ:

ОзнакомлСниС с Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ тСхничСских Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ эффСктивного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования C++.

1.3 Поиск ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Данная концСпция ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ сущСствСнно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹:

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ.

Π‘ΠΊΡ€Ρ‹Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‡Π»Π΅Π½ΠΎΠ² класса, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ испорчСно ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

БыстроС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ классы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… ΠΎΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ свойствами ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ сразу ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π³Π»Π°Π²Π½ΡƒΡŽ идСю Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

1.4 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° эффСктивности Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ИспользованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСсс написания ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅Π΅ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством ошибок, Π° Ρ‚Π°ΠΊΠΆΠ΅ минимальной Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

2. ΠΠΠΠ›Π˜Π— Π’Π Π•Π‘ΠžΠ’ΠΠΠ˜Π™

2.1 Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прСдставлСния ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ всСм трСбованиям, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² ΡΡ‚ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

2.2 ВыявлСниС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ

2.2.1 ВрСбования ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ характСристикам ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доску Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ пошагового ΠΎΠ±Ρ…ΠΎΠ΄Π° доски.

2.2.2 ВрСбования ΠΊ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΠΈ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

3. ΠŸΠ ΠžΠ•ΠšΠ’Π˜Π ΠžΠ’ΠΠΠ˜Π•

3.1 ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ интСрфСйса ΠŸΡ€ΠΈ построСнии Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, использовалась Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ GLUT.

ОписаниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GLUT:

1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ GLUT производится ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

void glutInit (int *argcp, char **argv);

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ прСдставляСт ΠΈΠ· ΡΠ΅Π±Ρ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти значСния бСрутся ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: int main (int argc, char *argv[]).

2. Установка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° содСрТит Π² ΡΠ΅Π±Π΅ нСсколько этапов. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°:

void glutInitWindowSize (int width, int height);

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ width — ΡˆΠΈΡ€ΠΈΠ½Π° ΠΎΠΊΠ½Π° Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…, Π²Ρ‚ΠΎΡ€ΠΎΠΉ height — высота ΠΎΠΊΠ½Π° Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…. ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ссли эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‚ΠΎ GLUT сам установит Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это 300×300.

Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ создаваСмого ΠΎΠΊΠ½Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° экрана. ДСлаСтся это ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

void glutInitWindowPosition (int x, int y);

НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для ΠΎΠΊΠ½Π° Ρ€Π΅ΠΆΠΈΠΌ отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’. Π΅. ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для ΠΎΠΊΠ½Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠ°ΠΊ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ цвСтовая модСль, количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ², ΠΈ Ρ‚. Π΄. Для этого Π² GLUT сущСствуСт ΠΊΠΎΠΌΠ°Π½Π΄Π°:

void glutInitDisplayMode (unsigned int mode);

Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ имССтся СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… констант ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ этих констант с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π˜Π›Π˜.

3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ установлСно Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.

int glutCreateWindow (const char *title);

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° создаёт ΠΎΠΊΠ½ΠΎ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ HANDLER ΠΎΠΊΠ½Π° Π² Π²ΠΈΠ΄Π΅ числа int. Π­Ρ‚ΠΎΡ‚ HANDLER ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ этим ΠΎΠΊΠ½ΠΎΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠΊΠ½Π°.

4. Установка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π° Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠΊΠ½Π°.

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

void glutDisplayFunc (void (*func)(void));

ЕдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅. НапримСр Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция void Draw (void), опрСдСлСнная Π² Π²Π°ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π»Π° Π·Π° Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅, Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΊ GLUT ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: glutDisplayFunc (Draw);

И Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° функция, которая ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡƒ мнСнию являСтся Π²Π°ΠΆΠ½ΠΎΠΉ — это функция, которая отслСТиваСт измСнСния ΠΎΠΊΠ½Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΎΠΊΠ½Π° измСнились Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ графичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°, Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π°, с ΠΌΠ΅Π½ΡŒΡˆΠΈΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΡƒΡŽ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

void glutReshapeFunc (void (*func)(int width, int height));

ЕдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΡƒΡŽ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°, которая ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° width ΠΈ height, соотвСтствСнно ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ Π²Ρ‹ΡΠΎΡ‚Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ) ΠΎΠΊΠ½Π°.

5. Π’Ρ…ΠΎΠ΄ Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» GLUT.

Ну ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ — это Π²ΠΎΠΉΡ‚ΠΈ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» GLUT. Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» запускаСт Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ сСрдцС GLUT, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обСспСчиваСт взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ Ρ‚Π΅ΠΌΠΈ функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ ΡƒΡΡ‚ройств Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» GLUT, Π½Π°Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

void glutMainLoop (void);

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ:

glutInit (&argc, argv); для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π°.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ продСмонстрирован Π½Π° Π ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

Рисунок 1. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

3.2 ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Варнсдорфа: ΠŸΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ доски, конь слСдуСт Π½Π° Ρ‚Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ число Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ. Если Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ нСсколько, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ….

На Π ΠΈΡΡƒΠ½ΠΊΠ΅ 2 наглядно прСдставлСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рисунок 2. Π‘Π»ΠΎΠΊ-схСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

4. ΠšΠžΠ”Π˜Π ΠžΠ’ΠΠΠ˜Π• Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ нахоТдСния ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π°:

const struct

{

int dx;

int dy;

} moves[] =//Массив Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ…ΠΎΠ΄Π° коня

{

{ -1, -2 },

{ 1, -2 },

{ -2, -1 },

{ 2, -1 },

{ -2, 1 },

{ 2, 1 },

{ -1, 2 },

{ 1, 2 }

};

multimap seq;//Массив, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заносится ΠΏΠ°Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

for (size_t i = 0; i < sizeof (moves) / sizeof (*moves); ++i) //РасчСт Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ…ΠΎΠ΄ΠΎΠ² с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ

{

const int x0 = x + moves[i]. dx;

const int y0 = y + moves[i]. dy;

int c = 0;//Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Ρ…ΠΎΠ΄ΠΎΠ²

for (size_t j = 0; j < sizeof (moves) / sizeof (*moves); ++j)

{

const int x1 = x0 + moves[j]. dx;

const int y1 = y0 + moves[j]. dy;

if (x1 >= 0 && x1 < N &&//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ доски

y1 >= 0 && y1 < N &&

!board[x1][y1])//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Ρ‹Π» Π»ΠΈ конь Π½Π° ΡΡ‚ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅

++c;

}

seq.insert (pair (c, i));

}

for (multimap:iterator i = seq. begin (); i ≠ seq. end (); ++i) //ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

{

const int x0 = x + moves[i -> second]. dx;

const int y0 = y + moves[i -> second]. dy;

if (x0 >= 0 && x0 < N &&//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ доски

y0 >= 0 && y0 < N &&//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Ρ‹Π» Π»ΠΈ конь Π½Π° ΡΡ‚ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅

!board[x0][y0] && solve (x0, y0))

return true;

}

board[x][y] = false;

solution.pop_back ();

return false;

}

Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ построСния графичСского интСрфСйса:

void display ()//Ѐункция построСния графичСского интСрфСйса

{

glClear (GL_COLOR_BUFFER_BIT);

const int step = 480 / N;

glBegin (GL_QUADS);//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ²

for (int i = 0; i < N; ++i)

for (int j = 0; j < N; ++j)

{

if ((i + j) % 2)

glColor3f (0.5, 0.5, 0.5);

else

glColor3f (0, 0, 0);

const int x = i * step;

const int y = j * step;

glVertex2f (x, y);

glVertex2f (x + step, y);

glVertex2f (x + step, y + step);

glVertex2f (x, y + step);

}

glEnd ();

glPointSize (3);

glBegin (GL_POINTS); //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ коня Π½Π° Π΄ΠΎΡΠΊΠ΅)

glColor3f (0, 1, 0);

for (int i = 0; i < N; ++i)

for (int j = 0; j < N; ++j)

if (board[i][j])

{

const int x = i * step + step / 2;

const int y = j * step + step / 2;

glVertex2f (x, y);

}

glEnd ();

glPointSize (1);

glBegin (GL_LINE_STRIP);//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΉ, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠΈ

for (vector:iterator i = solution. begin (); i ≠ solution. end (); ++i)

{

const int x = i -> x * step + step / 2;

const int y = i -> y * step + step / 2;

glVertex2f (x, y);

}

glEnd ();

glutSwapBuffers ();

}

5. Π’Π•Π‘Π’Π˜Π ΠžΠ’ΠΠΠ˜Π• Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ тСстированиС графичСского интСрфСйса:

Для Π½Π°Ρ‡Π°Π»Π° протСстируСм построСниС самой доски.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ доску Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8*8:

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡƒΡ‚ΡŒ интСрфСйс Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Рисунок 3. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски.

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ построСния Ρ‚ΠΎΡ‡ΠΊΠΈ:

Рисунок 4. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доскС.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ построСниС Π»ΠΈΠ½ΠΈΠΉ:

Рисунок 5. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π½Π° ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доскС.

Набор основных тСстов ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «ΠžΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌ» работоспособна.

http://www.cyberforum.ru/cpp.

http://msdn.microsoft.com/ru-ru/library/60k1461a (v=VS.90).aspx

http://compgraphics.info/OpenGL/template_glut.php

C++ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. БСрия «Π¨Π°Π³ Π·Π° ΡˆΠ°Π³ΠΎΠΌ» / Π“. Π¨ΠΈΠ»Π΄Ρ‚;

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ НаимСнованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠžΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ½Π΅ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: НахоТдСниС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ½Π΅ΠΌ.

1.1 ОснованиС для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π—Π°Π΄Π°Π½ΠΈΠ΅ прСподаватСля для провСдСния Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… занятий ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹.

1.2 НазначСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для нахоТдСния ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N*N ΠΎΡ‚ 5*5, Π΄ΠΎ 40*40 ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ½Π΅ΠΌ.

1.3 ВрСбования ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

1.3.1 ВрСбования ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ характСристикам ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доску Ρ€Π°Π·ΠΌΠ΅Ρ€Π° N*N ΠΎΡ‚ 5*5 Π΄ΠΎ 40*40, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ пошагового ΠΎΠ±Ρ…ΠΎΠ΄Π° доски.

1.3.2 ВрСбования ΠΊ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΠΈ НСкоррСктныС дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

1.4 ВрСбования ΠΊ ΡΠΎΡΡ‚Π°Π²Ρƒ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ тСхничСских срСдств ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° IBM-совмСстимых ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ….

Минимальная конфигурация: Ρ‚ΠΈΠΏ процСссора — Pentium III ΠΈ Π²Ρ‹ΡˆΠ΅; объСм ΠžΠ—Π£ — 512 Мб ΠΈ Π²Ρ‹ΡˆΠ΅.

НаличиС 10 Мб ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ пространства Π½Π° Π΄ΠΈΡΠΊΠ΅.

Π­Π’Πœ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½Π΅ Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ Microsoft Windows XP.

1.5 ВрСбования ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ совмСстимости ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π»ΡŽΠ±ΠΎΠΉ систСмой windows Π²Ρ‹ΡˆΠ΅ XP.

1.6 Условия эксплуатации Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ GLUT.

1.7 Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ трСбования НС ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Ρ‹.

1.8 ВрСбования ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записки. ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π° Π² ΡΠΎΠΎΡ‚вСтствии с Ρ‚рСбованиями Π“ΠžΠ‘Π’ 19.404−79. Π•Π‘ΠŸΠ”.

1.9 Π‘Ρ‚Π°Π΄ΠΈΠΈ ΠΈ ΡΡ‚Π°ΠΏΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов:

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Анализ способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π’Ρ‹Π±ΠΎΡ€ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ способа Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ РСализация Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ способа ВСстированиС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΎΠ± Π΅Π³ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

1.10 ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ контроля ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠΊΠΈ Боставил:

НаимСнованиС ΠΊΠ°Ρ„Π΅Π΄Ρ€Ρ‹

Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ

Ѐамилия И.О.

Подпись

Π”Π°Ρ‚Π°

Π­Π’Πœ

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ Π³Ρ€. 220 201

Π€ΠΎΠΊΠΈΠ½ А.Π“.

Богласовано:

НаимСнованиС ΠΊΠ°Ρ„Π΅Π΄Ρ€Ρ‹

ΠšΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»Ρƒ

Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ

Ѐамилия И.О.

Подпись

Π”Π°Ρ‚Π°

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

#include «stdafx.h»

#include «glut.h»

#include

#include

using namespace std;

const int N = 40;//Π Π°Π·ΠΌΠ΅Ρ€ поля

bool board[N][N]; //Массив, содСрТащий булСвскиС знаСния (true — конь Π½Π° Π΄ΠΎΡΠΊΠ΅, ΠΈ falce — конь отсутствуСт)

struct Position//Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° с ΠΏΠΎΠ·ΠΈΡ†ΠΈΡΠΌΠΈ коня Π½Π° Π΄ΠΎΡΠΊΠ΅

{

int x;

int y;

};

vector solution;//Π’Π΅ΠΊΡ‚ΠΎΡ€, содСрТащий ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ коня

void display ()//Ѐункция построСния графичСского интСрфСйса

{

glClear (GL_COLOR_BUFFER_BIT);

const int step = 480 / N;

glBegin (GL_QUADS);//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ²

for (int i = 0; i < N; ++i)

for (int j = 0; j < N; ++j)

{

if ((i + j) % 2)

glColor3f (0.5, 0.5, 0.5);

else

glColor3f (0, 0, 0);

const int x = i * step;

const int y = j * step;

glVertex2f (x, y);

glVertex2f (x + step, y);

glVertex2f (x + step, y + step);

glVertex2f (x, y + step);

}

glEnd ();

glPointSize (3);

glBegin (GL_POINTS);//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ коня Π½Π° Π΄ΠΎΡΠΊΠ΅)

glColor3f (0, 1, 0);

for (int i = 0; i < N; ++i)

for (int j = 0; j < N; ++j)

if (board[i][j])

{

const int x = i * step + step / 2;

const int y = j * step + step / 2;

glVertex2f (x, y);

}

glEnd ();

glPointSize (1);

glBegin (GL_LINE_STRIP);//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΉ, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠΈ

for (vector:iterator i = solution. begin (); i ≠ solution. end (); ++i)

{

const int x = i -> x * step + step / 2;

const int y = i -> y * step + step / 2;

glVertex2f (x, y);

}

glEnd ();

glutSwapBuffers ();

}

bool solve (int x, int y)

{

board[x][y] = true;//ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ коня Π½Π° Π΄ΠΎΡΠΊΡƒ

Position tmp = { x, y };

solution.push_back (tmp);

display ();

if (solution.size () == N * N)//Если Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N*N, Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΈ Π΄ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π° ΠΊΠΎΠ½Π΅ΠΌ.

return true;

/*

.1.2.

3…4

.x.

5…6

.7.8.

*/

const struct

{

int dx;

int dy;

} moves[] =//Массив Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ…ΠΎΠ΄Π° коня

{

{ -1, -2 },

{ 1, -2 },

{ -2, -1 },

{ 2, -1 },

{ -2, 1 },

{ 2, 1 },

{ -1, 2 },

{ 1, 2 }

};

multimap seq;//Массив, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заносится ΠΏΠ°Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

for (size_t i = 0; i < sizeof (moves) / sizeof (*moves); ++i) //РасчСт Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ…ΠΎΠ΄ΠΎΠ² с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ

{

const int x0 = x + moves[i]. dx;

const int y0 = y + moves[i]. dy;

int c = 0;//Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Ρ…ΠΎΠ΄ΠΎΠ²

for (size_t j = 0; j < sizeof (moves) / sizeof (*moves); ++j)

{

const int x1 = x0 + moves[j]. dx;

const int y1 = y0 + moves[j]. dy;

if (x1 >= 0 && x1 < N &&//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ доски

y1 >= 0 && y1 < N &&

!board[x1][y1])//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Ρ‹Π» Π»ΠΈ конь Π½Π° ΡΡ‚ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅

++c;

}

seq.insert (pair (c, i));

}

for (multimap:iterator i = seq. begin (); i ≠ seq. end (); ++i) //ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

{

const int x0 = x + moves[i -> second]. dx;

const int y0 = y + moves[i -> second]. dy;

if (x0 >= 0 && x0 < N &&//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ доски

y0 >= 0 && y0 < N &&

!board[x0][y0] &&//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Ρ‹Π» Π»ΠΈ конь Π½Π° ΡΡ‚ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅

solve (x0, y0))

return true;

}

board[x][y] = false;

solution.pop_back ();

return false;

}

void timer (int = 0)//ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° доски

{

for (int i = 0; i < N; ++i)

for (int j = 0; j < N; ++j)

board[i][j] = false;

solution.clear ();

solve (0, 0);

display ();

}

int main (int argc, char **argv)//Π’Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½

GLUT_RGB);

glutInitWindowSize (480, 480);

glutInitWindowPosition (40, 450 — 450);

glutCreateWindow («Knight's tour»);

glClearColor (0, 0, 0, 1.0);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

glOrtho (0, 480, 480, 0, -1, 1);

glutDisplayFunc (display);

glutTimerFunc (10, timer, 0);

glutMainLoop ();

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