> 1 <

Автор Сообщение

joneyfromhell

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#1979   2010-05-06 22:52 GMT+3 часа(ов)      
Раскрасить заданный граф четырьмя цветами, так что бы любые две смежные области не были окрашены в один цвет
(SETQ MAP '((A 0 (B C E G H))
(B 0 (A C E))
(C 0 (A B D E F))
(D 0 (C E F I J))
(E 0 (A B C D F G H I))
(F 0 (C D E H I J))
(G 0 (A E H))
(I 0 (D E F J H))
(H 0 (A E F G I))
(J 0 (D F I))))
(SETQ COLOR 1)
Каждый из элементов списка представляет собой тройку вида (имя_области цвет_области список_смежных_областей). Таким образом, например, область a имеет цвет 0 (т.е. не задан) и граничит с областями b,c,g,h и e.

Написал программу, все функции работают, но когда вызываю main жестоко зависает, потом выдает ошибку о переполнении стека.Может быть где то можно увеличить размер стека?
Собсна код:

DEFUN PAINT (AREA MP)
(COND
((NULL MP) NIL)
((EQL (CAAR MP) AREA) (CONS (LIST (CAAR MP) COLOR (CADDAR MP)) (CDR MP)))
(T (CONS (CAR MP) (PAINT AREA (CDR MP))))
)
)

(DEFUN PAINTABLE (AREA MP)
(COND
((NULL MP) NIL)
((EQL (CAAR MP) AREA)
(IF (OR (> (CADAR MP) 0) (ARND (CADDAR MP) MAP)) NIL T)
)
(T (PAINTABLE AREA (CDR MP)))
)
)

(DEFUN ARND (LST MP)
(COND
((OR (NULL MP) (NULL LST)) NIL)
((EQL (CAAR MP) (CAR LST))
(IF (EQL (CADAR MP) COLOR)
T
(ARND (CDR LST) (CDR MP))
)
)
(T (ARND LST (CDR MP)))
)
)

(DEFUN FND (AREA MAX MP)
(COND
((NULL MP) AREA)
((NOT (PAINTABLE (CAAR MP) MAP)) (FND AREA MAX (CDR MP)))
((> (COUNTMAX (CADDAR MP) 0) MAX) (FND (CAAR MP) (COUNTMAX (CADDAR MP) 0) (CDR MP)))
(T (FND AREA MAX (CDR MP)))
)
)

(DEFUN COUNTMAX (LST CNT)
(COND
((NULL LST) CNT)
(t (COUNTMAX (CDR LST) (+ CNT 1)))

)
)

(DEFUN MAIN ()
(SETQ AREA (FND NIL -1 MAP))
(IF (NULL AREA)
(IF (THEEND MAP) MAP ((SETQ COLOR (+ COLOR 1)) (MAIN)))
((SETQ MAP (PAINT AREA MAP)) (MAIN))
)
)

(DEFUN THEEND (MP)
(COND
((NULL MP) T)
((EQL (CADAR MP) 0) NIL)
(T (THEEND (CDR MP)))


Вывод должен быть такой:
((A 2 (B C E G H))
(B 4 (A C E))
(C 3 (A B D E F))
(D 4 (C E F I J))
(E 1 (A B C D F G H I))
(F 2 (C D E H I J))
(G 3 (A E H))
(I 3 (C D E F J H))
(H 4 (A E F G I))
(J 1 (D F I)))
> 1 <


Онлайн :

0 пользователь(ей), 31 гость(ей) :




Реклама на сайте: