На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Игра ввосьмерку на Lisp
      Вот прошу помочь мне доделать задачку про Восьмерку! смысл в том что в квадрате 8х8 есть цифры от 0 до 7 и пустое место b. необходимо перемещать цифры так чтобы они из перемешанного состояния по порядку выстроились. то есть из
      0 1 2
      3 4 5
      6 7
      (0 1 2 3 4 5 6 7 b).
      вот как у меня выводится
      (breadth-first-search '(0 1 2 3 4 5 6 b 7))
      ""Najdeno (0 1 2 3 4 5 6 7 B) za 3 shaga.
      Rasshiril 9 uzla, hranil maximum 5 uzlov."


      А как сделать так чтобы и сами шаги перебора выводились, то есть когда меняет местами цифры - это выводить как бы по шагам.

      вот, часть кода.
      [CODE]

      (defun successors (grid)
      "Return a list of new grids consisting of all possible moves from
      GRID."
      (delete nil (list (up grid)
      (down grid)
      (left grid)
      (right grid))))

      (defun finished? (grid)
      "Return T if GRID is in perfect order with the 'hole' at the end,
      NIL otherwise."
      (equal grid '(0 1 2 3 4 5 6 7 b)))

      (defun breadth-first-search (start)
      (let ((open (list start)) ; the list of nodes to be examined
      (closed (list)) ; the list of nodes already examined
      (steps 0) ; number of iterations
      (expanded 0) ; total number of nodes expanded
      (stored 0)) ; max number of nodes stored at any one time
      (loop while open do
      (let ((x (pop open)))
      (when (finished? x)
      (return (format nil "Najdeno ~a za ~a shaga.
      Rasshiril ~a uzla, hranil maximum ~a uzlov." x steps expanded stored)))
      (incf steps)
      (pushnew x closed :test #'equal)
      (let ((successors (successors x)))
      (incf expanded (length successors))
      (setq successors
      (delete-if (lambda (a)
      (or (find a open :test #'equal)
      (find a closed :test #'equal)))
      successors))
      (setq open (append open successors))
      (setq stored (max stored (length open))))))))

      Если мало комментариев - поясню, просто билась с не долго так, вот очень прошу помочь доделать! если что - в ответ тоже что нибудь помогу! просто вот досталась задачка))
      Сообщение отредактировано: OlyA8 -
        Спасибо, уже рзобралась!)) :D
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0150 ]   [ 16 queries used ]   [ Generated: 19.04.24, 14:17 GMT ]