<?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=9359&amp;view=findpost&amp;p=91270</guid>
        <pubDate>Wed, 14 May 2003 10:40:16 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91270</link>
        <description><![CDATA[GrAnd: Задача Раскраска карты. <br>Имеется географическая карта, на которой расположено n стран. Каждую страну надо раскрасить в один из k цветов так, чтобы соседние страны были раскрашены в разные цвета. <br><br><br>Географическую карту будем задавать в виде матрицы C размером nґ n. Элемент Ci,j равен 1, если страны i и j – соседние и равен 0 иначе. <br><br>Пространство перебора состоит из наборов (x1,...,xn), xi О {1, ...,k}. Условие совместимости m-го элемента с предыдущими: если Ci,m=1 (1 Ј i &lt; m), то xi № xm. <br><br>Рекурсивная процедура, осуществляющая перебор с возвратом запишется по рассмотренной схеме: <br><br><br><br> &nbsp;procedure перебор_с_возвратом(m : integer);<br> &nbsp;var i : integer;<br> &nbsp;begin<br> &nbsp; &nbsp;if m &gt; n &nbsp;then<br> &nbsp; &nbsp; &nbsp; &lt;найдено решение&gt;<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; for i := 1 &nbsp;to k &nbsp;do begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;цвет[m] := i;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if &lt;цвета стран 1,...,m-1 соседних с m-ой не i&gt; &nbsp;then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; перебор_с_возвратом(m+1);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp;end;<br><br>Однако в отличие от задачи о ферзях, в данной задаче перебор можно сократить ещё больше за счёт симметрии решений задачи. Предположим, мы нашли решение задачи. Если мы теперь в этом решении у всех вершин поменяем местами i-ую и j-ую краску, то получившаяся раскраска тоже будет решением. Из таких симметричных решений нам достаточно найти одно. Таким образом, при выборе краски для очередной страны нам достаточно перебрать все уже используемые краски и всего одну (первую) из новых. <br><br><br><br> &nbsp;procedure перебор_с_возвратом(m : integer);<br> &nbsp;var i : integer;<br> &nbsp;begin<br> &nbsp; &nbsp; if m &gt; n &nbsp;then<br> &nbsp; &nbsp; &nbsp; &nbsp;&lt;найдено решение&gt;<br> &nbsp; &nbsp; else begin<br> &nbsp; &nbsp; &nbsp; &nbsp; for i := 1 &nbsp;to кол_красок &nbsp;do begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;цвет[m] := i;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if &lt;цвета стран 1,...,m-1 соседних с m-ой не i&gt; &nbsp;then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;перебор_с_возвратом(m+1);<br> &nbsp; &nbsp; &nbsp; &nbsp; end;<br> &nbsp; &nbsp; &nbsp; &nbsp; if кол_красок &lt; k &nbsp;then begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;кол_красок := кол_красок+1;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;цвет[m] := кол_красок;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;перебор_с_возвратом(m+1);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;кол_красок := кол_красок-1;<br> &nbsp; &nbsp; &nbsp; &nbsp; end;<br> &nbsp; &nbsp; end;<br> &nbsp;end;<br><br>]]></description>
        <author>GrAnd</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91269</guid>
        <pubDate>Wed, 14 May 2003 10:16:55 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91269</link>
        <description><![CDATA[Булат Шакиров: Количество учеников по школам в сотношении 4:4:2:2 (4:3:3:2).<br>Где можно почитать про<br>а) жадный алгоритм<br>б) задачу о раскраске?]]></description>
        <author>Булат Шакиров</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91268</guid>
        <pubDate>Tue, 13 May 2003 09:02:48 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91268</link>
        <description><![CDATA[volatile: Предположим, что учеников никакой школы не настолько много, чтобы задача не решалась (грубая оценка - половина всех учеников, точнее будет понятно по ходу решения).<br>Тогда красим прямоугольник в шахматном порядке в два цвета - чёрный и белый.<br>Группируем учеников по школам - в порядке уменьшения численности и сажаем все школы по очереди - сначала в чёрные клетки, затем в белые - слева-направо, сверху-вниз. Очевидно, что два ученика одной школы станут соседами только если школа будет последней, которую начали сажать в чёрные клетки, продолжили сажать в белые, и учеников было настолько много, что они встретились - с теми учениками, которых рассадили первыми.<br>Существует ли решение в таких случаях - не знаю. Возможно удастся доказать, что нет.]]></description>
        <author>volatile</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91267</guid>
        <pubDate>Wed, 07 May 2003 19:40:40 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91267</link>
        <description><![CDATA[Demo_S: так, конкретно решения не услышаь, так, только мысли умные и не очень:) еще поспрошаю, благо есть у кого:)<br><br>а мысли<br>1) очень похожа на задачу о раскраске, только с ограничением<br>2) если свести ее к графу, будет легче решать (искать решение)<br><br>3) вполне возможно, что прокатит жадный алгоритм.<br>4) вроде бы рассадить невозможно, только если учеников из какой-нить школы больше половины...<br><br>ЗЫ насколько я понял, нужно &quot;раскрасить&quot; клетки шахматной доски так, чтобы никакие две сосдение (по вертикали или горизонтали) не были одного цвета.<br>но количество &quot;раз которые можно красить&quot; ограничено.]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91266</guid>
        <pubDate>Tue, 06 May 2003 22:04:12 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91266</link>
        <description><![CDATA[Demo_S: пока нет, люди от меня (вдвоем) прячутся.:)<br>ну сегодня то (среда уже) им точно не отвертеться:)]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91265</guid>
        <pubDate>Tue, 06 May 2003 04:17:05 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91265</link>
        <description><![CDATA[Булат Шакиров: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Demo_S, 02.05.03, 14:05:31</span><div class='quote '>спрошу в понедельник у знающих людей:)<br></div></div><br>Спросил? :)<br>]]></description>
        <author>Булат Шакиров</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91264</guid>
        <pubDate>Fri, 02 May 2003 10:05:31 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91264</link>
        <description><![CDATA[Demo_S: оптимизированный перебор (aka &nbsp;методо ветвей и границ).<br><br>Возможно что-нить более оптимальное, но так сходу не придумывается:)<br><br>спрошу в понедельник у знающих людей:)<br>]]></description>
        <author>Demo_S</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91263</guid>
        <pubDate>Fri, 02 May 2003 07:00:48 +0000</pubDate>
        <title>Рассадить учеников по партам</title>
        <link>https://forum.sources.ru/index.php?showtopic=9359&amp;view=findpost&amp;p=91263</link>
        <description><![CDATA[Булат Шакиров: Имеется:<br>класс - n рядов по m парт в каждом<br>n*m ученика из разных школ -<br>k1 - из 1-й<br>k2 - из 2-й<br>k3 - из 3-й<br>k4 - из 4-й<br>k1+k2+k3+k4 = m*n<br>Необходимо рассадить учеников по партам таким образом, чтобы ученики из одной школы не сидели рядом ни по вертикали, ни по горизонтали (по диагонали можно).<br>Например так.<br><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>  12    15    17<br>  15    12    20<br>  12    15    17<br>  15    20    12<br></div></div><br>Задачу я решил использованием генератора случайных чисел, но выяснилось, что существуют такие комбинации расстановок, при которых задача не решается (примерно половина).<br>Существует ли общий метод (алгоритм), позволяющий решить эту задачу? <br>]]></description>
        <author>Булат Шакиров</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	