шуканої (obj! = NULL)
// і не збігаються з координатами попередньої кімнати, то повертаємо брехня
return (obj-> id. x == x && obj-> id. y == y) | | IsVisited (x, y, obj-> parent); return false;
}
// функція установки нового лістаleaf :: SetNewLeaf (leaf * obj, int n)
{
// виділяємо пам'ять> kids [n] = new leaf;
// призначаємо попередню кімнату в дереві відвідувань
obj-> kids [n] -> parent = obj;
}
// реверсивна функція розмітки путіleaf :: Tracing (leaf * obj, int n)
{(obj! = NULL) {
// відзначаємо кімнату номером n [obj-> id. x] [obj-> id. y]. number = n;
// і попередню кімнату номером n-1 (obj-> parent, n +1);}
}
// функція установки номерів всіх кімнат в 0
void InNul ()
{(int i = 0; i
}
// функція пошуку шляху в лабіринті
// в процесі створюється дерево з кімнат
void leaf :: GrowTree (TPoint p, leaf * obj)
{
// обробляємо системні повідомлення програми: натискання миші, клавіш> ProcessMessages ();
// якщо був переключений режим
// то міняємо заголовок (info == 1) -> Caption = "Обробляється кімната з координатами" + IntToStr (p. x) + "," + IntToStr (p. y) + ". "; (Info == 2) (max! = 0) -> Caption =" Поточний шлях забирає монет: "+ IntToStr (max)
+ "; через" + IntToStr (a [A. x] [A. y]. number) + "кімнат"; -> Caption = "Шлях ще не знайдено" ;
// записуємо сумарна кількість забраних монет (obj-> parent == NULL)
obj-> mone = a [p. x] [p. y]. sokrovihe;> mone = obj-> parent-> mone + a [p. x] [p. y]. sokrovihe;
// записуємо координати поточної кімнати
obj-> id = p;
// якщо поточна - це та, яку нам треба було знайти
if (p. x == B. x && p. y == B. y) {
// якщо ми ще не записували максимальну кількість монет
// або знайшли новий максимальний шлях (max == 0 | | obj-> mone> max) {
// записуємо кількість монет = obj-> mone;
// Обнуляємо всі кімнати ();
// записуємо шлях (obj, 1);
// отрісовиваємих ();
}
// видаляємо виділену пам'ять [] obj-> kids; obj;
// виходимо;
}