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

Поиск ΠΏΡƒΡ‚ΠΈ Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅

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

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт массив структур komnat. КаТдая структура ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚ΠΎΠΉ, Π»ΠΈΠ±ΠΎ стСной. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ создаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ условиям Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ ΠΈ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится входная Π΄Π²Π΅Ρ€ΡŒ ΠΈ Π²Ρ‹Ρ…одная Π΄Π²Π΅Ρ€ΡŒ. Алгоритм поиска ΠΏΡƒΡ‚ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ соотвСтствуСт Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅, Π° Π²Π΅Ρ‚Π²ΠΈ — сосСдних ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Поиск ΠΏΡƒΡ‚ΠΈ Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • 1. ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅
  • 1.1 Основания для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
  • 1.2 НазначСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
  • 1.3 ВрСбования ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
  • 1.4 ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΠΊΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚роля
  • 1.5 ВСсты
  • 2. ВСхничСский ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
  • 2.1 Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов
  • 3. Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
  • 3.1 ΠžΠ±Ρ‰Π΅Π΅ описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • 3.2 ОписаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ класса leaf
  • 3.3 ОписаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ класса TForm1
  • 3.4 ОписаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ класса TForm2
  • Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

1. ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

1.1 Основания для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ОснованиСм для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° слуТит Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…» .

1.2 НазначСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π—Π°Π΄Π°Π½ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚, составлСнный ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚ имССтся Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π΄Π²Π΅Ρ€Π΅ΠΉ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой сосСдниС ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹. Одна ΠΈΠ· Π΄Π²Π΅Ρ€Π΅ΠΉ называСтся Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚, другая — Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ хранятся сокровища: ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΎ ΡΡ‚Π° Π·ΠΎΠ»ΠΎΡ‚Ρ‹Ρ… ΠΌΠΎΠ½Π΅Ρ‚. Найти ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π° Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° ΠΊ Π΅Π³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ, Π½Π΅ ΠΏΡ€ΠΎΡ…одящий ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π΄Π²Π° Ρ€Π°Π·Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ унСсти ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС сокровищ. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ графичСски, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

РассмотрСнныС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹

ΠŸΡ€ΠΈ постановкС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ издСлия Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Borland C++Builder 6 Π² ΡΠΈΠ»Ρƒ лСгкости проСктирования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ издСлия Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ согласно Π“ΠžΠ‘Π’ 19.701−90, Π“ΠžΠ‘Π’ 2.304−88. Единая систСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ВрСбования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ издСлию

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ трСбования

Β· БистСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Β· ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΉ для условий задания.

Β· Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ количСство ΠΌΠΎΠ½Π΅Ρ‚, ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΎ ΡΡ‚Π°.

Β· ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ унСсти ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС сокровищ, ΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ графичСски.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ограничСния, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Windows. Для пСрСноса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ срСдства.

НоситСли ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ исполняСмого Ρ„Π°ΠΉΠ»Π° Π½Π° Π΄ΠΈΡΠΊΠ΅ CD-R, Π»ΠΈΠ±ΠΎ Π½Π° ΠΆΠ΅ΡΡ‚ΠΊΠΎΠΌ дискС, Π»ΠΈΠ±ΠΎ Π½Π° flash-носитСлС.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€ графичСского Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиш.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ графичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° с Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, количСство ΠΌΠΎΠ½Π΅Ρ‚, собранных Π½Π° ΡΡ‚ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ, ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚ Π² ΠΏΡƒΡ‚ΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт массив структур komnat. КаТдая структура ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚ΠΎΠΉ, Π»ΠΈΠ±ΠΎ стСной. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ создаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ условиям Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ ΠΈ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится входная Π΄Π²Π΅Ρ€ΡŒ ΠΈ Π²Ρ‹Ρ…одная Π΄Π²Π΅Ρ€ΡŒ. Алгоритм поиска ΠΏΡƒΡ‚ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ соотвСтствуСт Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅, Π° Π²Π΅Ρ‚Π²ΠΈ — сосСдних ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΅ΡΡ‚ΡŒ доступ. Если Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ поиска Π²Π΅Ρ‚ΠΊΠ° достигла Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ размСчаСтся, Π° ΡΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ сокровища ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΡΡ‚ся. Алгоритм поиска Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ всС Π²Π΅Ρ‚Π²ΠΈ, Π² ΡΠ²ΡΠ·ΠΈ с Ρ‡Π΅ΠΌ врСмя поиска увСличиваСтся ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ количСству Π΄Π²Π΅Ρ€Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΠΈ.

РСстарт

Π’ ΡΠ»ΡƒΡ‡Π°ΡΡ… рСстарта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ рСстартС Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ

ВрСбования ΠΊ ΡΠΎΡΡ‚Π°Π²Ρƒ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ тСхничСских срСдств

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ дисковоС пространство Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 300 Кб, свободная опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 12 Мб, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ экрана Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 1024×768, Ρ‚Π°ΠΊΠΆΠ΅ микропроцСссор 80 486 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ издСлия

Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ LABIRINT. exe.

1.3 ВрСбования ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ докумСнтация Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

1) тСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅;

2) Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚;

3) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (листинг исходных тСкстов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ издСлия).

1.4 ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΠΊΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚роля

ΠŸΡ€ΠΈΠ΅ΠΌΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ издСлия осущСствляСтся ΠΏΡ€ΠΈ сдачС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… этапов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ испытаний Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ установлСнных тСстов. ВСсты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π½Π° ΡΡ‚Π°ΠΏΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ издСлия.

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ borland builder

1.5 ВСсты

ВСст № 1

ДСйствия: запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: появляСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ привСтствия (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.1).

Рисунок 1.1 ВСст № 1

ВСст № 2

ДСйствия: ΠΊΠ»ΠΈΠΊ ΠΌΡ‹ΡˆΡŒΡŽ Π² ΠΎΠΊΠ½Π΅ привСтствия.

РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: появляСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ со ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ΠΎΠΌ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся процСсс поиска ΠΏΡƒΡ‚ΠΈ (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.2).

ВСст № 3

ДСйствия: ΠΊΠ»ΠΈΠΊ ΠΌΡ‹ΡˆΡŒΡŽ ΠΏΠΎ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Ρƒ с Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ.

РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: гСнСрируСтся Π½ΠΎΠ²Ρ‹ΠΉ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся процСсс поиска ΠΏΡƒΡ‚ΠΈ (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.2), Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ ΠΏΠΎ Π½Π΅ΠΎΠ±Ρ…одимости пСрСрисовываСтся. ΠŸΡ€ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ процСсса поиска выводятся сообщСния: Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ поиска ΠΎ Π½Π΅ΠΎΠ±Ρ…одимости ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.3), Π° Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ поиска с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.4, 1.5).

Рисунок 1.2 ВСст № 2,3

Рисунок 1.3 ВСст № 3

Рисунок 1.4 ВСст № 3

Рисунок 1.5 ВСст № 3

ВСст № 4

ДСйствия: Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠŸΡ€ΠΎΠ±Π΅Π»»

РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ измСняСтся Ρ€Π΅ΠΆΠΈΠΌ отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ€Π΅ΠΆΠΈΠΌ отрисовки Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.2, 1.6, 1.7).

Рисунок 1.4 ВСст № 6

Рисунок 1.4 ВСст № 7

ВСст № 5

ДСйствия: Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Escape Π²ΠΎ Π²Ρ€Π΅ΠΌΡ поиска ΠΏΡƒΡ‚ΠΈ.

РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: процСсс поиска ΠΏΡƒΡ‚ΠΈ досрочно Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ся информация (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 1.3, 1.4, 1.5).

2. ВСхничСский ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

2.1 Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов

3. Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

3.1 ΠžΠ±Ρ‰Π΅Π΅ описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅ состоит ΠΈΠ· 2 ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΈΠ·Π΄Π΅Π»ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ичСским ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ TCanvas. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ поступаСт с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΌΡ‹ΡˆΠΈ.

3.2 ОписаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ класса leaf

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ leaf: leaf ()

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π²Π΅Ρ‚Π²Π΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° Π΄Π΅Ρ€Π΅Π²Π° поиска ΠΏΡƒΡ‚ΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: kids.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° bool leaf: IsVisited (int x, int y, leaf* obj)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: int x, int y — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ провСряСмой ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, leaf* obj — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡ‹ΠΉ ΡƒΠ·Π΅Π» Π΄Π΅Ρ€Π΅Π²Π°.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π±ΡƒΠ»Π΅Π²Π° пСрСмСнная.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: рСкурсивно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ всС ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, начиная с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚ΠΎΠΉ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ указатСля obj->parent. Если Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ½Π°Ρ‚ нашлась ΠΊΠΎΠΌΠ½Π°Ρ‚Π° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x ΠΈ Ρƒ, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ true, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ false.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void leaf: SetNewLeaf (leaf *obj, int n)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠ·Π΅Π» Π΄Π΅Ρ€Π΅Π²Π° leaf* obj, Π½ΠΎΠΌΠ΅Ρ€ ΡƒΠ·Π»Π° int n.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄Π΅Ρ€Π΅Π²Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void leaf: Tracing (leaf* obj, int n)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠ·Π΅Π» послСднСй ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ leaf* obj, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ int n.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: ΠΊΠΎΠΌΠ½Π°Ρ‚Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ ΠΈΠ· ΡƒΠ·Π»Π° Π΄Π΅Ρ€Π΅Π²Π° поиска obj отмСчаСтся Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ n ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎ отмСчаСтся ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» Π² Π΄Π΅Ρ€Π΅Π²Π΅.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: массив ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° a.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void leaf: GrowTree (TPoint p, leaf* obj)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠ·Π΅Π» Π΄Π΅Ρ€Π΅Π²Π° leaf* obj, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ TPoint p.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π½Π° ΡΠΎΠΎΡ‚вСтствиС с Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚ΠΎΠΉ. ΠŸΡ€ΠΈ совпадСнии запоминаСтся количСство собранных ΠΌΠΎΠ½Π΅Ρ‚ ΠΈ ΠΏΡƒΡ‚ΡŒ отмСчаСтся Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° рСкурсивно вызываСтся для сосСдних ΠΊΠΎΠΌΠ½Π°Ρ‚.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: массив ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° a.

3.3 ОписаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ класса TForm1

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void __fastcall TForm1: Image1Click (TObject *Sender)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: ΠΎΠΊΠ½ΠΎ привСтствия скрываСтся ΠΈ ΠΏΠΎΡΠ²Π»ΡΠ΅Ρ‚ся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

3.4 ОписаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ класса TForm2

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void CreateLabirint ()

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: инициализируСтся массив ΠΊΠΎΠΌΠ½Π°Ρ‚, Π·Π°Ρ‚Π΅ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ выбираСтся случайная ΠΊΠΎΠΌΠ½Π°Ρ‚Π° ΠΈ ΠΎΡ‚ Π½Π΅Π΅ формируСтся ΠΏΡƒΡ‚ΡŒ случайной Π΄Π»ΠΈΠ½Ρ‹. ПослС создания Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ входная ΠΈ Π²Ρ‹Ρ…одная Π΄Π²Π΅Ρ€ΡŒ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: массив ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° a, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚ A ΠΈ B.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void Draw ()

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: Π½Π° Π³Ρ€Π°Ρ„ичСский Π±ΡƒΡ„Π΅Ρ€ выводятся ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° ΠΈ Ρ‡ΠΈΡΠ»Π° (Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠΎΠΌΠ½Π°Ρ‚, количСство ΠΌΠΎΠ½Π΅Ρ‚, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° отобраТСния), Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· Π³Ρ€Π°Ρ„ичСского Π±ΡƒΡ„Π΅Ρ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ выводится Π² ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: графичСский Π±ΡƒΡ„Π΅Ρ€ buffer, Ρ€Π΅ΠΆΠΈΠΌ отобраТСния int info, массив ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° a.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void InNul ()

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: Π½ΠΎΠΌΠ΅Ρ€Π° всСх ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° ΠΎΠ±Π½ΡƒΠ»ΡΡŽΡ‚ΡΡ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: массив ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° a.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void __fastcall TForm2: FormKeyPress (TObject *Sender, char &Key)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ссылка Π½Π° Π½Π°ΠΆΠ°Ρ‚ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ &Key, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ *Sender.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: обрабатываСтся наТатая клавиша. ΠŸΡ€ΠΈ клавишС «ΠŸΡ€ΠΎΠ±Π΅Π»» Ρ€Π΅ΠΆΠΈΠΌ отобраТСния цикличСски мСняСтся, ΠΏΡ€ΠΈ клавишС «Escape» процСсс поиска ΠΏΡƒΡ‚ΠΈ прСрываСтся. ПослС наТатия Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ пСрСрисовываСтся.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Ρ€Π΅ΠΆΠΈΠΌ отобраТСния int info, Π±ΡƒΠ»Π΅Π²Π° пСрСмСнная — Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ процСсс поиска ΠΏΡƒΡ‚ΠΈ — bool process.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void __fastcall TForm2: FormCloseQuery (TObject *Sender, bool &CanClose)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ссылка Π½Π° Π±ΡƒΠ»Π΅Π²Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ закрытия ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — &CanClose, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ *Sender.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: Ссли производится поиск ΠΏΡƒΡ‚ΠΈ, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π»ΠΈΡˆΠ°Π΅Ρ‚ΡΡ возмоТности Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒΡΡ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Π±ΡƒΠ»Π΅Π²Π° пСрСмСнная — Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ процСсс поиска ΠΏΡƒΡ‚ΠΈ — bool process.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void __fastcall TForm2: FormClose (TObject *Sender, TCloseAction &Action)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ссылка Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ дСйствиС &Action, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ *Sender.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: прилоТСния закрываСтся.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void __fastcall TForm2: FormClick (TObject *Sender)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ *Sender.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: запускаСтся процСсс поиска ΠΏΡƒΡ‚ΠΈ, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выводятся сообщСния ΠΎΠ± ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ поиска.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: ΠΊΠΎΡ€Π΅Π½ΡŒ поискового Π΄Π΅Ρ€Π΅Π²Π° root, Π±ΡƒΠ»Π΅Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ — Ρ„Π»Π°Π³ запуска процСсса поиска process, Ρ„Π»Π°Π³ прСрывания процСсса поиска newprocess, количСство максимально собранных сокровищ — int max, массив ΠΊΠΎΠΌΠ½Π°Ρ‚ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° a.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° void __fastcall TForm2: FormCreate (TObject *Sender)

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ *Sender.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: измСняСтся Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ графичСского Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ся Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: графичСский Π±ΡƒΡ„Π΅Ρ€ buffer.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

1 Мозговой М. Π’. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ. 1-Π΅ ΠΈΠ·Π΄. [ВСкст] - БПб.: ΠŸΠΈΡ‚Π΅Ρ€, 2004. — 208 с.

2 ΠšΡƒΠ»ΡŒΡ‚ΠΈΠ½ Н. Π‘. C/C++ ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. 2-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. [ВСкст] - БПб.: Π‘Π₯Π’ — ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2011. — 368 с.

3 ΠΡ€Ρ…Π°Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ А. Π―. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π‘++ Builder 6. [ВСкст] - М.: Π‘ΠΈΠ½ΠΎΠΌ, 2008. — 1152 с.: ΠΈΠ».

4 Ахо А. Π’., Π₯ΠΎΠΏΠΊΡ€ΠΎΡ„Ρ‚ Π”. Π­., Ульман Π”. Π”. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. [ВСкст] - БПб.: Π’ΠΈΠ»ΡŒΡΠΌΡ, 2000. — 382 с.: ΠΈΠ».

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Листинг Ρ„Π°ΠΉΠ»Π° Unit1. cpp

// —————————————————————————————————————;

#include

#pragma hdrstop

#include «Unit1. h»

#include «Unit2. h»

// —————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*. dfm»

TForm1 *Form1;

// —————————————————————————————————————;

__fastcall TForm1: TForm1 (TComponent* Owner)

: TForm (Owner)

{

}

// —————————————————————————————————————;

void __fastcall TForm1: Image1Click (TObject *Sender)

{

Form1->Visible = false;

Form2->Visible = true;

Form2->Show ();

Form2->SetFocus ();

Form2->FormClick (Form2);

}

// —————————————————————————————————————;

Листинг Ρ„Π°ΠΉΠ»Π° Unit2. cpp

// —————————————————————————————————————;

#include

#pragma hdrstop

#include «Unit1. h»

#include «Unit2. h»

// —————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*. dfm»

TForm2 *Form2;

// структура ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

struct komnata{

// являСтся Π»ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ‚

bool stena;

// сокровища

int sokrovihe;

// Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π² Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ ΠΏΡƒΡ‚ΠΈ

int number;

};

// структура ΡƒΠ·Π»Π° Π΄Π΅Ρ€Π΅Π²Π° (ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹), строящСгося для нахоТдСния ΠΏΡƒΡ‚ΠΈ

struct leaf{

// Ρ‚ΠΎΡ‡ΠΊΠ°, Π΅Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ — это Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

// ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ

TPoint id;

// сколько Π΄Π΅Π½Π΅Π³ накапливаСтся Π΄ΠΎ ΡΡ‚ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

int mone;

// ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ

leaf* parent;

// ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΡΠΎΡΠ΅Π΄Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

leaf** kids;

// конструктор ΡƒΠ·Π»Π°

leaf () {

// выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для сосСдних ΠΊΠΎΠΌΠ½Π°Ρ‚

kids = new leaf* [4];

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

kids [i] =NULL;

}

bool IsVisited (int x, int y, leaf* obj);

void SetNewLeaf (leaf *obj, int n);

void Tracing (leaf* obj, int n);

void GrowTree (TPoint p, leaf* obj);

};

// Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

const int N = 15;

// массив ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚

komnata a [N] [N];

// максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… сокровищ

int max = 0;

// Ρ€Π΅ΠΆΠΈΠΌ отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

int info = 0;

// ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠΎΡ€Π΅Π½ΡŒ поискового Π΄Π΅Ρ€Π΅Π²Π°

leaf* root = NULL;

// Ρ‚ΠΎΡ‡ΠΊΠΈ — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠΎΠΌΠ½Π°Ρ‚ Π²Ρ…ΠΎΠ΄Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π°

TPoint A, B;

// Π±Ρ‹Π» Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½ процСсс поиска ΠΏΡƒΡ‚ΠΈ

bool process = false;

// Π±Ρ‹Π» Π»ΠΈ ΠΏΡ€Π΅Ρ€Π²Π°Π½ процСсс поиска ΠΏΡƒΡ‚ΠΈ

bool newprocess = false;

// графичСский Π±ΡƒΡ„Π΅Ρ€ для отрисовки Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

Graphics: TBitmap *buffer = new (Graphics: TBitmap);

// —————————————————————————————————————;

__fastcall TForm2: TForm2 (TComponent* Owner)

: TForm (Owner)

{

}

// —————————————————————————————————————;

// функция создания Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

void CreateLabirint ()

{

// создаСм Π²Π΅Π·Π΄Π΅ стСны

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

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

a [i] [j]. stena = true;

a [i] [j]. sokrovihe=random (99) +1;

a [i] [j]. number=0; }

// тСкущая ΠΊΠΎΠΌΠ½Π°Ρ‚Π° ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния

int x, y, c;

// Π΄Π΅Π»Π°Π΅ΠΌ N/2 Ρ†ΠΈΠΊΠ»ΠΎΠ² создания ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€ΠΎΠ²

for (int i=0; i<=N/2; i++) {

// Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

x = random (N-2) +1;

y = random (N-2) +1;

// Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ случайноС Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния

c = random (4);

// Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ случайноС количСство ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Π°

for (int d = random (3) +2; d>=0; d—) {

// Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ случайноС количСство ΠΊΠΎΠΌΠ½Π°Ρ‚ Π΄ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°

for (int k = random (3) +2; k>=0; k—) {

switch © {

// ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… сторон

case 0: x++; break;

case 1: y++; break;

case 2: x—; break;

case 3: y—; break; }

// самыС ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΡ‹ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ

if (x<=0||y<=0||x>=N-2||y>=N-2) break;

a [x] [y]. stena = false; }

// ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

c = (c+1) %4; }}

// случайно Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ

A. x=0; A. y=0;

while (A. x==0&&A. y==0)

if (a [x=random (N)] [y=random (N)]. stena==false)

{A. x=x; A. y=y; };

// случайно Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ

B. x=0; B. y=0;

while (B. x==0&&B. y==0)

if (a [x=random (N)] [y=random (N)]. stena==false)

{B. x=x; B. y=y; };

}

// функция отрисовки Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°

void Draw ()

{

// Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ сСтки Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ

int n=buffer->Height/N;

int m=buffer->Width/N;

// Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ нарисованноС Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ

buffer->Canvas->Brush->Color = clWhite;

buffer->Canvas->Pen->Color = clWhite;

buffer->Canvas->Rectangle (0,0,buffer->Width, buffer->Height);

// ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚

for (int i=0; i

for (int j=0; j

// Ссли это стСна, Ρ‚ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΅Π΅ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ

if (a [i] [j]. stena) {

buffer->Canvas->Pen->Color = clBlack;

buffer->Canvas->Brush->Color = clBlack;

buffer->Canvas->Rectangle (i*m, j*n, i*m+m, j*n+n);

}else{

// Ссли это ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, Ρ‚ΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° отобраТСния рисуСм ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ

switch (int inf=info) {

// Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

case (0): {

buffer->Canvas->Brush->Color = clWhite;

buffer->Canvas->Font->Color = clRed;

// Ссли это ΠΊΠΎΠΌΠ½Π°Ρ‚Π° Π²Ρ…ΠΎΠ΄Π°, Ρ‚ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΅Π΅ ΠΆΠ΅Π»Ρ‚Ρ‹ΠΌ

if (i==A. x&&j==A. y) {

buffer->Canvas->Brush->Color = clYellow;

buffer->Canvas->Pen->Color = clYellow;

buffer->Canvas->Font->Color = clBlack;

buffer->Canvas->Rectangle (i*m, j*n, i*m+m, j*n+n); }

// Ссли это ΠΊΠΎΠΌΠ½Π°Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄Π°, Ρ‚ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΅Π΅ Π³ΠΎΠ»ΡƒΠ±Ρ‹ΠΌ

if (i==B. x&&j==B. y) {

buffer->Canvas->Brush->Color = clSkyBlue;

buffer->Canvas->Pen->Color = clSkyBlue;

buffer->Canvas->Font->Color = clBlack;

buffer->Canvas->Rectangle (i*m, j*n, i*m+m, j*n+n); }

// Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ количСство ΠΌΠΎΠ½Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ Π² ΡΡ‚ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅

buffer->Canvas->TextOutA (i*m+1,j*n+1, IntToStr (a [i] [j]. sokrovihe));

// Ссли Ρ‡Π΅Ρ€Π΅Π· эту ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π½Π΅ Π²Π΅Π΄Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ, Ρ‚ΠΎ ΡƒΡ…ΠΎΠ΄ΠΈΠΌ

if (a [i] [j]. number==0) continue;

// ΠΈΠ½Π°Ρ‡Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π² ΠΏΡƒΡ‚ΠΈ

String s=IntToStr (a [i] [j]. number);

// Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈ отрисовкС

int I=i*m+m-buffer->Canvas->TextWidth (s);

int J=j*n+n-buffer->Canvas->TextHeight (s);

buffer->Canvas->Brush->Color = clLime;

buffer->Canvas->Font->Color = clBlack;

// ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π½Π° Π·Π΅Π»Ρ‘Π½ΠΎΠΌ Ρ„ΠΎΠ½Π΅

buffer->Canvas->TextOutA (I, J, s);

break; }

// Ρ€Π΅ΠΆΠΈΠΌ отобраТСния Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ

case 1: {

buffer->Canvas->Brush->Color = clLime;

buffer->Canvas->Pen->Color = clBlack;

buffer->Canvas->Font->Color = clBlack;

// ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°

buffer->Canvas->Font->Size+=3;

// Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ надписи

String s=IntToStr (a [i] [j]. number);

int I=buffer->Canvas->TextWidth (s);

int J=buffer->Canvas->TextHeight (s);

// рассчитываСм Π΅Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти посСрСдинС

int x=i*m+ (m-I) /2;

int y=j*n+ (n-J) /2;

// Ссли эта ΠΊΠΎΠΌΠ½Π°Ρ‚Π° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΠΏΡƒΡ‚ΡŒ Ρ‚ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΅Π΅

if (a [i] [j]. number==0)

buffer->Canvas->Brush->Color = clWhite;

buffer->Canvas->Rectangle (i*m, j*n, i*m+m, j*n+n);

// ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π΅ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΡƒ

if (a [i] [j]. number! =0)

buffer->Canvas->TextOutA (x, y, s);

buffer->Canvas->Font->Size-=3;

break; }

// Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΡΠΎΠΊΡ€ΠΎΠ²ΠΈΡ‰Π°Ρ…

case 2: {

buffer->Canvas->Font->Color = clBlack;

buffer->Canvas->Brush->Color = clYellow;

buffer->Canvas->Pen->Color = clBlack;

buffer->Canvas->Font->Size+=3;

// Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ надписи

String s=IntToStr (a [i] [j]. sokrovihe);

int I=buffer->Canvas->TextWidth (s);

int J=buffer->Canvas->TextHeight (s);

int x=i*m+ (m-I) /2;

int y=j*n+ (n-J) /2;

// Ссли ΠΊΠΎΠΌΠ½Π°Ρ‚Π° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΠΏΡƒΡ‚ΡŒ, Ρ‚ΠΎ Ρ„ΠΎΠ½ Π΄Π΅Π»Π°Π΅ΠΌ Π±Π΅Π»Ρ‹ΠΌ

if (a [i] [j]. number==0)

buffer->Canvas->Brush->Color = clWhite;

buffer->Canvas->Rectangle (i*m, j*n, i*m+m, j*n+n);

buffer->Canvas->TextOutA (x, y, s);

buffer->Canvas->Font->Size-=3; }

}}

// ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ всС нарисованноС ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° Π² ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Form2->Canvas->CopyRect (TRect (0,0,Form2->Width, Form2->Height),

buffer->Canvas, TRect (0,0,Form2->Width, Form2->Height));

}

// рСкурсивная функция ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ посСщСния ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

bool leaf: IsVisited (int x, int y, leaf* obj)

// функция установки Π½ΠΎΠ²ΠΎΠ³ΠΎ листа

void leaf: SetNewLeaf (leaf *obj, int n)

{

// выдСляСм ΠΏΠ°ΠΌΡΡ‚ΡŒ

obj->kids [n] =new leaf;

// Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π² Π΄Π΅Ρ€Π΅Π²Π΅ посСщСний

obj->kids [n] - >parent = obj;

}

// рСвСрсивная функция Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΡƒΡ‚ΠΈ

void leaf: Tracing (leaf* obj, int n)

{

if (obj! =NULL) {

// ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅ΠΌ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ n

a [obj->id. x] [obj->id. y]. number=n;

// ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ n-1

Tracing (obj->parent, n+1); }

}

// функция установки Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² всСх ΠΊΠΎΠΌΠ½Π°Ρ‚ Π² 0

void InNul ()

{

for (int i=0; i

for (int j=0; j

a [i] [j]. number=0;

}

// функция поиска ΠΏΡƒΡ‚ΠΈ Π² Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π΅

// Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ создаСтся Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚

void leaf: GrowTree (TPoint p, leaf* obj)

{

// ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ систСмныС сообщСния прилоТСния: наТатия ΠΌΡ‹ΡˆΠΈ, клавиш

Application->ProcessMessages ();

// Ссли Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ

// Ρ‚ΠΎ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

if (info==1)

Form2->Caption="ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ½Π°Ρ‚Π° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ «+IntToStr (p. x) +» ," +IntToStr (p. y) +". «;

if (info==2)

if (max! =0)

Form2->Caption="Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚: «+IntToStr (max)

+"; Ρ‡Π΅Ρ€Π΅Π· «+IntToStr (a [A. x] [A. y]. number) +» ΠΊΠΎΠΌΠ½Π°Ρ‚" ;

else

Form2->Caption="ΠŸΡƒΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½" ;

// записываСм суммарноС количСство Π·Π°Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ½Π΅Ρ‚

if (obj->parent == NULL)

obj->mone=a [p. x] [p. y]. sokrovihe;

else

obj->mone=obj->parent->mone+a [p. x] [p. y]. sokrovihe;

// записываСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

obj->id = p;

// Ссли тСкущая — это Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΡ‚ΠΈ

if (p. x==B. x&&p. y==B. y) {

// Ссли ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π»ΠΈ максимальноС количСство ΠΌΠΎΠ½Π΅Ρ‚

// ΠΈΠ»ΠΈ нашли Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ

if (max==0||obj->mone>max) {

// записываСм количСство ΠΌΠΎΠ½Π΅Ρ‚

max=obj->mone;

// обнуляСм всС ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

InNul ();

// записываСм ΠΏΡƒΡ‚ΡŒ

Tracing (obj, 1);

// отрисовываСм

Draw ();

}

// удаляСм Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ

delete [] obj->kids;

delete obj;

// Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

return;

}

// Ссли ΠΌΡ‹ Π½Π΅ ΠΎΡ‚мСняли процСсс поиска клавишСй Escape

// Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ссылки Π½Π° ΡΠΎΡΠ΅Π΄Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

if (! newprocess) {

if (! a [p. x-1] [p. y]. stena&&! IsVisited (p. x-1,p. y, obj))

SetNewLeaf (obj, 0);

if (! a [p. x+1] [p. y]. stena&&! IsVisited (p. x+1,p. y, obj))

SetNewLeaf (obj, 1);

if (! a [p. x] [p. y-1]. stena&&! IsVisited (p. x, p. y-1,obj))

SetNewLeaf (obj, 2);

if (! a [p. x] [p. y+1]. stena&&! IsVisited (p. x, p. y+1,obj))

SetNewLeaf (obj, 3);

// ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ сосСдниС ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

if (obj->kids [0]! =NULL)

GrowTree (TPoint (p. x-1,p. y), obj->kids [0]);

if (obj->kids [1]! =NULL)

GrowTree (TPoint (p. x+1,p. y), obj->kids [1]);

if (obj->kids [2]! =NULL)

GrowTree (TPoint (p. x, p. y-1), obj->kids [2]);

if (obj->kids [3]! =NULL)

GrowTree (TPoint (p. x, p. y+1), obj->kids [3]);

}

// удаляСм Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ

delete [] obj->kids;

delete obj;

}

// —————————————————————————————————————;

// ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши

void __fastcall TForm2: FormKeyPress (TObject *Sender, char &Key)

{

// Ссли Π±Ρ‹Π» Π½Π°ΠΆΠ°Ρ‚ ΠŸΡ€ΠΎΠ±Π΅Π», Ρ‚ΠΎ ΠΌΠ΅Π½ΡΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

if (Key==VK_SPACE)

info = (info+1) %3;

// Ссли Escape, Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая досрочно Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ

// Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска

if (Key==VK_ESCAPE)

newprocess = true;

// ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

if (info==0)

if (process)

Caption="ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ поиск ΠΏΡƒΡ‚ΠΈ. (Π²ΠΊΠ»/ΠΎΡ‚ΠΊΠ» ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ — ΠŸΡ€ΠΎΠ±Π΅Π»)" ;

else

Caption="ΠŸΡƒΡ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½ (для смСны Π²ΠΈΠ΄Π° — ΠŸΡ€ΠΎΠ±Π΅Π»)" ;

if (! info&&! process)

Caption="Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚: «+IntToStr (max)

+"; Ρ‡Π΅Ρ€Π΅Π· «+IntToStr (a [A. x] [A. y]. number) +» ΠΊΠΎΠΌΠ½Π°Ρ‚" ;

Draw ();

}

// Ссли ΠΈΠ΄Π΅Ρ‚ процСсс поиска, Ρ‚ΠΎ Π½Π΅Π»ΡŒΠ·Ρ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ

// —————————————————————————————————————;

void __fastcall TForm2: FormCloseQuery (TObject *Sender, bool &CanClose)

{

if (process) CanClose=false;

}

// —————————————————————————————————————;

// Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

void __fastcall TForm2: FormClose (TObject *Sender, TCloseAction &Action)

{

Application->Terminate ();

}

// —————————————————————————————————————;

// Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ

void __fastcall TForm2: FormClick (TObject *Sender)

{

// Ссли процСсс поиска ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½, Ρ‚ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΠΌ

if (process) {

Caption="Π˜Π΄Π΅Ρ‚ поиск. Для остановки Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Escape" ;

return; }

// Π·Π°Π½ΠΎΠ²ΠΎ создаСм Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚

newprocess = false;

CreateLabirint ();

// создаСм ΠΊΠΎΡ€Π΅Π½ΡŒ Π΄Π΅Ρ€Π΅Π²Π°

root = new leaf;

root->parent = NULL;

max = 0;

info = 0;

// отрисовываСм пусто Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚

Draw ();

Caption="ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ поиск ΠΏΡƒΡ‚ΠΈ. (Π²ΠΊΠ»/ΠΎΡ‚ΠΊΠ» ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ — ΠŸΡ€ΠΎΠ±Π΅Π»)" ;

process = true;

// ΠΈΡ‰Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ.

root->GrowTree (A, root);

// отрисовываСм

Draw ();

// Ссли Ρ‚Π°ΠΊ ΠΈ Π½Π΅ Π½Π²ΡˆΠ»ΠΈ

if (max==0) {

Caption="ΠŸΡƒΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ! Π›Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ слСдуСт ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ!" ;

ShowMessage («ΠŸΡƒΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ! Π›Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚ слСдуСт ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ!»);

} else {

// Ссли нашли, Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСния

Caption = «ΠŸΡƒΡ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½!» ;

ShowMessage («ΠΠ°ΠΉΠ΄Π΅Π½ ΠΏΡƒΡ‚ΡŒ, проходящий Ρ‡Π΅Ρ€Π΅Π· „+IntToStr (a [A. x] [A. y]. number) +“ ΠΊΠΎΠΌΠ½Π°Ρ‚»);

ShowMessage («Π‘ΠΎΠ±Ρ€Π°Π½ΠΎ ΠΌΠΎΠ½Π΅Ρ‚: «+IntToStr (max)); }

process = false;

}

// —————————————————————————————————————;

// устанавливаСм Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ графичСского Π±ΡƒΡ„Π΅Ρ€Π°

void __fastcall TForm2: FormCreate (TObject *Sender)

{

buffer->Width=Form2->Width;

buffer->Height=Form2->Height;

Draw ();

}

// —————————————————————————————————————;

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