<?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=421322&amp;view=findpost&amp;p=3846154</guid>
        <pubDate>Fri, 09 Apr 2021 19:41:58 +0000</pubDate>
        <title>Конь прыгает по шахматной доске с минами</title>
        <link>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846154</link>
        <description><![CDATA[scrambrella: Перебор с возвратом ещё не освоили? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2021-04-09T22:45:06+03:00">09.04.21, 19:45</time></span></span><br>
Граф не нужен. Бинарная матрица.]]></description>
        <author>scrambrella</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846081</guid>
        <pubDate>Thu, 08 Apr 2021 14:44:03 +0000</pubDate>
        <title>Конь прыгает по шахматной доске с минами</title>
        <link>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846081</link>
        <description><![CDATA[AVA12: Можно скрестить матрицу и вектор. У каждой вершины может быть не более 8 смежных, координаты потенциальных смежных клеток легко вычисляются. Для клетки с координатами (x, y) возможные кандидаты - это (x+-2, y+-1) и (x+-1, y+-2). Либо использовать сплошную нумерацию, тогда у клетки [i] потенциальными смежниками будут [i +- 2*N +- 1] и [i +- N +- 2]. Для каждой клетки заводим битовый массив из 8 элементов, где 1 означает, что соответствующий кандидат присутствует на поле и не содержит мину.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846080</guid>
        <pubDate>Thu, 08 Apr 2021 14:39:18 +0000</pubDate>
        <title>Конь прыгает по шахматной доске с минами</title>
        <link>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846080</link>
        <description><![CDATA[OpenGL: Имхо, в озвученной задаче вообще нафиг не надо хранить граф. Храни матрицу состояния ячеек, а смежные вершины вычисляй каждый раз.]]></description>
        <author>OpenGL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846075</guid>
        <pubDate>Thu, 08 Apr 2021 06:03:18 +0000</pubDate>
        <title>Конь прыгает по шахматной доске с минами</title>
        <link>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846075</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421322&view=findpost&p=3846072'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-04-08T00:08:40+00:00">08.04.21, 00:08</time></span><div class='quote '>матрица смежности гораздо удобнее при кодировании</div></div><br>
Крайне спорное утверждение, если данные хранятся в программе. Просто список смежности делается двухуровневым - разреженный (а при сплошной, а не координатной, нумерации, как на скрине - вообще обычный) вектор вершин (указатели на элементы списка смежности, он же список непосредственной достижимости) и собственно список.<br>
<br>
Или, если в языке имеется - то ассоциативный массив (коллекция), где ключ - номер вершины, а значение - вектор достижимых вершин.<br>
<br>
Вот если они лежат в БД - то да.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846072</guid>
        <pubDate>Thu, 08 Apr 2021 00:08:40 +0000</pubDate>
        <title>Конь прыгает по шахматной доске с минами</title>
        <link>https://forum.sources.ru/index.php?showtopic=421322&amp;view=findpost&amp;p=3846072</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу переходим к делу&#33;<br>
<br>
<strong class='tag-b'><em class='tag-i'><span class='tag-size' data-value='14' style='font-size:14pt;'>Условие задачи.</span></em></strong><br>
Есть шахматная доска (не классическая) размером N x N, где N = [2 ... 1000], то есть максимальный размер доски может быть 1 000 на 1 000 итого 1 000 000 (миллион) клеток. N задается в процессе работы программы. В ячейки шахматного поля раскладывают мины (на одну ячейку можно положить не больше 1ой мины). Гарантируется, что M = [0 ... (N - 2)]. Клетки, содержащие мину, будем называть запрещенными. В любую свободную клетку поля ставится КОНЬ(К). Также задается клетка, докуда ему нужно допрыгать.<br>
Гарантируется, что:<ul class="tag-list"><li>Координаты исходной (где стоит КОНЬ) и конечной клеток НЕ совпадают</li><li>Исходная (где стоит КОНЬ) и конечная клетки свободны, то есть на них нет мин</li></ul><br>
Цель КОНЯ добраться от стартовой клетки до конечной, прыгая ТОЛЬКО на свободные клетки (без мин). То есть в ответе достаточно написать слово &quot;Да&quot; (если это возможно) или &quot;Нет&quot;. Если КОНЬ после хода/прыжка окажется в клетке с миной, то ему каюк, разумеется)<br>
===================================================================<br>
Для наглядности приведу пример стартового поля (это лишь условный пример):<br>
<span class="b-attach" data-size="8156" data-hits="69" data-attach-id="62934" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=62934' title='Скачать файл' target='_blank'>chess_field.png</a> (, : 69)
		</span><br>
Зеленая клетка - клетка, куда стремится конь&#33; К - стартовое положение коня. Клетки с минами (запрещенные клетки) закрашены черным фоном.<br>
И вот эта задача на графы + BFS/DFS.<br>
<br>
А что такое граф, в самом грубом смысле?? Граф - совокупность вершин и ребер/дуг.<br>
Но еще есть способы задания/представления графа с точки зрения программирования/хранения в памяти&#33; Например: матрица смежности, списки смежности, матрица инцидентности и т.д.<br>
Шахматная доска с минами и конем НЕ является способом задания графа, как я понимаю)) Поэтому, самый важный момент на этом этапе - увязать доску с конем и графом... Именно поэтому я спрашиваю, т к, если здесь ошибиться, то все остальное будет насмарку<br>
<br>
Кстати, напомню возможные ходы шахматного коня:<br>
<span class="b-attach" data-size="9950" data-hits="422" data-attach-id="62935" data-attach-post-id="3846072">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3846072&amp;attach_id=62935' title='Скачать файл' target='_blank'>horse_moves.png</a> (, : 422)
		</span><br>
<br>
Как хочется соорудить граф.<br>
1. Каждая клетка без мины (свободная клетка) шахматного поля (хотя по факту, это просто сетка на самом деле) будет выражать ВЕРШИНУ графа.<br>
2. Кол-во вершин будущего графа считаем по формуле: N - M (кол-во всех клеток поля - кол-во запрещенных клеток). Также учитывать надо стартовую и конечную клетку.<br>
3. Граф неориентированный, то есть конь может прыгнуть с клетки &quot;А&quot; в &quot;Б&quot; и наоборот.<br>
4. Предельная степень любой вершины графа НЕ превосходит 8&#33; Рисунок выше это доказывает...По факту будет гораздо меньше, ну, в среднем 2-3, наверное...<br>
5. Нумеруем вершины графа, проходя построчно (сверху вниз) заданное шахматное поле<br>
6. Строим списки смежности (&#33;) - то есть формируем способ задания графа.<br>
7. Запускаем DFS от стартовой вершины до конечной. Можно еще до запуска проверить конечную вершину по спискам смежности: если нет ни одной вершины смежной с конечной - конь стопудова не доберется до нее)<br>
<br>
Вот пример построения списков смежности для условного примера:<br>
<span class="b-attach" data-size="20897" data-hits="450" data-attach-id="62936" data-attach-post-id="3846072">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3846072&amp;attach_id=62936' title='Скачать файл' target='_blank'>adj_list.png</a> (, : 450)
		</span><br>
<br>
Всего в графе 28 вершин. Если получать матрицу смежности, то будет нерациональное использование дин.памяти. Т к всего ячеек в такой матрице 28 * 28, а задействовано будет НЕ больше, чем 28 * 8 (в реальности в 2 раза меньше). Поэтому здесь лучше взять списки смежности. На мое ИМХО матрица смежности гораздо удобнее при кодировании, чем списки смежности, но в данном случае эта матрица смежности будет слишком разряженной...<br>
=============================================================<br>
<br>
<strong class='tag-b'><em class='tag-i'><span class='tag-size' data-value='14' style='font-size:14pt;'>Вопрос</span></em></strong><br>
Я правильно выбрал модель формирования графа по отношению к этой задаче? Если нет, то просьба пояснить, как можно правильнее или вообще по-другому.<br>
Просто все дальнейшие алгоритмы завязаны именно на этой модели. Ошибка на этом этапе - ставит крест на эффективном решении данной задачи)<br>
<br>
спс. за внимание <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2021-04-08T00:10:25+00:00">08.04.21, 00:10</time></span></span><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">Еще вопрос вдогонку: а разве форум не поддерживает оформления в стиле LATEX, ну типа там &#036;x^2&#036; или &#036;&#092;frac{3}{&#092;sin(y) - 4}&#036;, хм... думал, что какой-нибудь модуль mathjax подключен...</div></div>]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	