<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=395581&amp;view=findpost&amp;p=3541238</guid>
        <pubDate>Tue, 04 Nov 2014 11:19:53 +0000</pubDate>
        <title>LISP по алгоритму поиска решений в глубину переделать по алгоритму в ширину</title>
        <link>https://forum.sources.ru/index.php?showtopic=395581&amp;view=findpost&amp;p=3541238</link>
        <description><![CDATA[Vesper: Переставь операнды у append, где она вызывается для изменения open, должно хватить.]]></description>
        <author>Vesper</author>
        <category>Lisp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=395581&amp;view=findpost&amp;p=3536221</guid>
        <pubDate>Sun, 19 Oct 2014 12:52:07 +0000</pubDate>
        <title>LISP по алгоритму поиска решений в глубину переделать по алгоритму в ширину</title>
        <link>https://forum.sources.ru/index.php?showtopic=395581&amp;view=findpost&amp;p=3536221</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=395581&view=findpost&p=3535474'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Екатерина_93 &#064; <time class="tag-quote__quoted-time" datetime="2014-10-16T10:28:02+00:00">16.10.14, 10:28</time></span><div class='quote '>то есть принцип формирования списка open соответствует стеку, когда в алгоритме поиска в ширину принцип формирования списка OPEN соответствует очереди.</div></div> Ну собственно ты и сам всё знаешь. Собственно алгоритмы только тем и отличаются, что при поиске в глубину используется стек, а при поиске в ширину очередь. Правда поиск в глубину можно реализовать ещё и рекурсией.]]></description>
        <author>amk</author>
        <category>Lisp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=395581&amp;view=findpost&amp;p=3535474</guid>
        <pubDate>Thu, 16 Oct 2014 10:28:02 +0000</pubDate>
        <title>LISP по алгоритму поиска решений в глубину переделать по алгоритму в ширину</title>
        <link>https://forum.sources.ru/index.php?showtopic=395581&amp;view=findpost&amp;p=3535474</link>
        <description><![CDATA[Екатерина_93: Здравствуйте&#33; Помогите пожалуйста&#33;  :oops: :help: Есть готовая правильная рабочая программа, реализующая задачу о двух кувшинах, написанная на Lisp по алгоритму поиска решений в пространстве состояний В ГЛУБИНУ. Нужно переделать чтобы работала по алгоритму поиска В ШИРИНУ &#33; <br>
<br>
Задача о двух кувшинах <br>
<br>
Условие - Дан кувшин с водой емкостью N литров и пустой кувшин емкостью M литров. Требуется получить заданную емкость L литров (L&lt;N и L&lt;M). Воду можно либо выливать, либо переливать из одного кувшина в другой. (Кувшины можно полностью наполнять водой неограниченно). Значения N, M, L вводятся с клавиатуры, например, соответственно: 5, 2, 1<br>
<br>
Немного теории : При поиске в глубину всегда раскрывается самая глубокая вершина в текущем фронте поиска. Процедура поиска в глубину отличается от процедуры поиска в ширину тем, что дочерние вершины, получаемые при раскрытии вершины x , помещаются в начало списка OPEN ,то есть принцип формирования списка open соответствует стеку, когда в алгоритме поиска в ширину принцип формирования списка OPEN соответствует очереди. :help:<br>
[ code ]<br>
(defun lab5()<br>
	(princ &quot;N M L: &quot;)<br>
<br>
	(let* ((n (read *standard-input*))(m (read *standard-input*))(l (read *standard-input*)) (open (list (list n 0))) (close nil) (x)) <br>
	(loop <br>
<br>
		(if (equal open nil ) (return &quot;Nea&quot;) )<br>
		(setf x (first open))<br>
		(setf close (append close (list x)))<br>
		(if (equal (second x) l) (return &quot;YES&quot;))<br>
		(setf open (cdr open))		<br>
		(cond <br>
<br>
			( (and (not (equal (first x) 0)) (not (equal (second x) 0)))<br>
				(if (&gt; m (second x))<br>
				 	(setf open (append open (list (list (- (first x) (- m (second x))) m))))<br>
<br>
<br>
					(if (&lt; (first x) (second x)) <br>
						(setf open (list (list 0 (first x)))) <br>
						(setf open (append open (list (list (first x) 0))))<br>
					)<br>
				)<br>
			)<br>
<br>
			( (and  (equal (first x) 0) (equal (second x) 0)) <br>
				(setf open (append open (list (list n 0)) ))<br>
			)<br>
<br>
			( (and (not (equal (first x) 0)) (equal (second x) 0)) <br>
				(if (&gt; (- (first x) m) 0) <br>
					(setf open (list (list (- (first x) m) m)))<br>
					(setf open (append open(list (list 0 (first x)))))<br>
				)<br>
			)<br>
<br>
			( (and (equal (first x) 0) (not (equal (second x) 0))) <br>
				(setf open (append open (list (list n (second x))) ))<br>
			)<br>
		)<br>
		(print x)<br>
		<br>
	)<br>
	)<br>
)<br>
[ /code ]]]></description>
        <author>Екатерина_93</author>
        <category>Lisp</category>
      </item>
	
      </channel>
      </rss>
	