Path of Exile – Лабиринт: руководство и советы по прохождению. Правило одной руки Как пройти лабиринт из сорока клеток

Одним из самых простых правил для прохождения лабиринта является правило "одной руки": двигаясь по лабиринту, надо все время касаться правой или левой рукой его стены. Этот алгоритм, вероятно, был известен еще древним грекам. Придется пройти долгий путь, заходя во все тупики, но в итоге цель будет достигнута. Хотя у этого правила и есть один недостаток, но о нем мы поговорим позже.

Попробуем описать робота, действующего в соответствии с правилом "правой руки".

В начале своей работы робот должен найти стену, по которой он будет следовать. Для этого он может просто двигаться вперед, пока не упрется в преграду.

После того как робот наткнулся на препятствие, он начинает передвигаться в соответствии с правилом "правой руки".

Двигаясь вдоль стены, робот следит, есть ли проход справа. Если проход есть, робот должен идти по нему, чтобы не оторваться от стены справа.

Если прохода нет - впереди стена - робот поворачивает налево. Если прохода снова нет, он еще раз поворачивает налево, таким образом разворачиваясь на 180 градусов, и идет в обратном направлении.

Блок-схема алгоритма для робота, работающего по правилу "правой руки", представлена на рисунке.

Попробуем проверить работу данного алгоритма и напишем для него программу. Для этой цели обратимся к среде программирования . Эта среда является удобным средством для моделирования различных алгоритмов, связанных с управлением роботами. В ней есть исполнитель черепаха, который по своей сути является не чем иным, как самым настоящим роботом. Черепаха располагает очень удобным набором команд - вперед, направо, налево, назад. Кроме того, в центре черепахи есть датчик, принимающий значение от 0 до 100, в зависимости от тона поверхности, на которой она находится.

Диалект языка Лого, который мы будем использовать, очень прост и похож на Basic. Познакомиться с командами языка можно . А бесплатно скачать среду программирования GameLogo - . Размер дистрибутива невелик - всего 1 Mb.

В архиве с GameLogo есть фоны с лабиринтами, одним из которых мы и воспользуемся.

В самом начале программы дадим команду черепахе, чтобы она подняла перо (по умолчанию черепаха оставляет после себя след).

Размер поля - 800 на 600 точек. Исходное положение для черепахи находится в месте с координатами 115, 545 (белый квадрат).

Цвет дорожек лабиринта - светлый, на них датчик будет принимать значения больше 50. Цвет стен лабиринта - темный, значение датчика будет меньше 50. Выход из лабиринта представлен черным квадратом, значение датчика над которым будет равно 0.

Объявим переменную флаг, с помощью которой будем контролировать, достигнут ли выход из лабиринта.

Напишем программу и запустим ее с помощью большой красной кнопки с надписью "Выполнить".

Переменная флаг фон = maze1.gif поднять перо место 115, 545 " поиск первой стены повторять пока датчик > 50 { вперед 12 } " правило правой руки повторять пока флаг = 0 { направо 90 вперед 12 если датчик = 0 то флаг = 1 иначе если датчик

Если известно, что у лабиринта нет отдельно стоящих стенок, то есть нет замкнутых маршрутов, по которым можно возвращаться в исходную точку, то такой лабиринт называют односвязным и его всегда можно обойти полностью, применив правило "одной руки".

Если же лабиринт содержит отдельно стоящие стенки, то, применяя правило "одной руки", не всегда можно пройти все коридоры и тупики. Лабиринты с отдельно стоящими стенками и с замкнутыми маршрутами называются многосвязными. При этом многосвязные лабиринты можно разделить на две группы: без "петли" вокруг цели (замкнутый маршрут не проходит вокруг цели) и с замкнутой "петлей" вокруг цели (цель можно обойти по замкнутому маршруту).

В многосвязных лабиринтах второй группы правило "одной руки" не работает и, применяя его, достичь цели невозможно. Но и эти лабиринты можно пройти, полагаясь на точный алгоритм.

Решение задачи о таких лабиринтах принадлежит сравнительно позднему времени, и начало ему положено Леонардом Эйлером. Эйлер не без оснований полагал, что выход из любого лабиринта может быть найден, и притом сравнительно простым путем.

Универсальный алгоритм прохождения любых лабиринтов был описан только через столетие в книге французского математика Э. Люка "Recreations matematiques", изданной в 1882 году. Интересно, что Люка при описании алгоритма указал на первенство другого французского математика М. Тремо. Таким образом, алгоритм стал известен как алгоритм Люка-Тремо .

Тремо предлагает следующие правила: выйдя из любой точки лабиринта, надо сделать отметку на его стене (крест) и двигаться в произвольном направлении до тупика или перекрестка; в первом случае вернуться назад, поставить второй крест, свидетельствующий, что путь пройден дважды - туда и назад, и идти в направлении, не пройденном ни разу, или пройденном один раз; во втором - идти по произвольному направлению, отмечая каждый перекресток на входе и на выходе одним крестом; если на перекресте один крест уже имеется, то следует идти новым путем, если нет - то пройденным путем, отметив его вторым крестом.

Зная алгоритм Тремо, можно скорректировать поведение легендарного Тесея. Вдохновленный подарком любимой Ариадны, он уверенно идет по лабиринту. Вдруг перед ним возникает ход, по которому уже протянута нить... Что делать? Ни в коем случае не пересекать ее, а вернуться по уже известному пути, сдваивая нить, пока не найдется еще один непройденный ход.

Применив вариант алгоритма Тремо, отец теории информации Клод Шеннон (Claude Elwood Shannon) построил одного из первых самообучающихся роботов. Шеннон дал ему звучное имя "Тесей", но в истории "Тесей" стал больше известен как "мышь" Шеннона. "Мышь" сначала обследовала весь лабиринт, а затем (во второй раз) проходила весь путь значительно быстрее, избегая участков, пройденных дважды.


В наши дни роботы, проходящие лабиринт, являются участниками одного из самых интересных состязаний думающих машинок, которое проходит в нескольких странах мира. Эти соревнования носят общее название и по своим техническим новациям относятся к лидерам робототехнического спорта.

На первой Российской Олимпиаде Роботов проводились соревнования, целью которых было прохождение своеобразного лабиринта: за наиболее короткое время, двигаясь через "открытые двери" в стенках, робот должен был добраться от места старта до места финиша. Контролировать свое движение робот мог по черным линиям, нанесенным на пол лабиринта.

Лабиринт – новая зона, добавленная в дополнении Ascendancy (патч 2.2), его необходимо пройти, чтобы получить доступ к подклассам (классам восхождения), а также для доступа к зачарованию.

За первое прохождение лабиринта на каждой из сложностей сложности дают по 2 очка, которые можно вложить в специальные пассивные способности подклассов.

Как попасть в лабиринт

Чтобы попасть в основной лабиринт необходимо перед этим пройти 6 маленьких, они располагаются в следующих локациях:

  • Акт 1: Тюремное подземелье (The Lower Prison)
  • Акт 2: Обитель грехов, уровень 2 (Chamber of Sins Level 2)
  • Акт 2: Склеп, уровень 1 (The Crypt Level 1)
  • Акт 3: Крематорий (The Crematorium)
  • Акт 3: Катакомбы (The Catacombs)
  • Акт 3: Зеленый лабиринт (The Hedge Maze) – в эту локацию нет прямого телепорта из города, в нее можно попасть из локации Имперские сады (The Imperial Gardens)

Вход в основной лабиринт находится в городе третьего акта:

Мини-лабиринты необходимо пройти по одному разу, после чего доступ в основной лабиринт будет открыт навсегда (для текущей сложности).

Босс

В основном лабиринте вам предстоит 3 боя с главным боссом – Изарием (Izaro). Он имеет несколько разных версий, с разными видами помощников.

Первая фаза. В первой фазе ему помогают статуи. Появляются они постепенно. В одной вариации можно убить, в другой – только временно деактивировать. Убейте/деактивируйте статуи, и только после этого наносите урон боссу. Иначе, за каждого оставшегося активного помощника он получит бонусы в финальном бою.

Вторая фаза. Теперь ему будут помогать мини-боссы. Появляются также поочередно. Убейте вначале их, и только потом бейте основного босса.

Третья фаза. Если вы не убили помощников из предыдущих фаз – босс будет значительно усилен. Также в комнате с боссом будут ловушки. Самая лучшая тактика – имея перевес в уровне стоять в одном безопасном от ловушек месте и бить босса.

Но даже при этом помните, что в некоторых версиях Изарий может телепортировать игрока прямо в ловушки.

После третьей фазы вы попадаете в локацию, где:

  • Можете наложить зачарование (один раз за одно прохождение)
  • Взять подкласс/дополнительные 2 очка (если проходите первый раз)
  • Открыть сундуки. Для их открытия требуются ключи, которые можно найти только в самом лабиринте.

Также в самом лабиринте есть особая зона, где находится «зверь». Если убить его, то босс станет проще. Но, на мой взгляд прохождение ловушек опаснее чем «чуть-чуть» усиленный босс, который с перекачкой не составляет проблем.

Примечание: если вам есть что добавить – пишите в комментариях. Полезные советы будут добавлены в это руководство.

Не спешить

Пожалуй главный совет в прохождении ловушек – не спешить. Принцип работы ловушек, и как их проходить понять не сложно, для этого нужно лишь на несколько секунд остановиться и понаблюдать за ними.

Совет «не спешить» особенно важен для всех игроков хардкорных лиг.

Навигация по лабиринту

При входе в каждую локацию лабиринта рядом будет стоять особая стойка, нажав на которую откроется карта лабиринта и ваше текущее месторасположение.

Высокий уровень

Высокий уровень в прохождении лабиринта поможет только в бою с боссом. Ловушки, по моим экспериментам, наносят урон в % отношении от здоровья, а также игнорируют броню. По этому ни большое количество здоровья, ни броня, не поможет пробегать ловушки с закрытыми глазами.

Навыки передвижения

Некоторые ловушки можно перепрыгнуть, некоторые сложные места «пролететь» за секунды с помощью навыков передвижения. Обязательно имейте хотя бы один в своем арсенале.

Флаконы

Некоторые особо опасные ловушки помимо урона накладывают на персонажа кровотечение, по этому особенно важно иметь на многих, а лучше на всех флаконах – снятие кровотечения. Также, очень важно иметь на большинстве флаконов восстановления здоровья свойство мгновенного восстановления.

Из-за возвращения в город придётся проходить лабиринт сначала, поэтому флаконов для восстановления здоровья лучше взять побольше.

Снижение урона от ловушек

Единственное (из того, что мне удалось узнать), чем можно снизить урон ловушек – это Заряды выносливости (Endurance charge).

Монстры

Не убивайте монстров в лабиринте без особой необходимости – они помогут восстановить заряды на флаконах, когда это понадобится.

Также, монстры позволяют получать Заряды выносливости (Endurance charge).

Регенерация здоровья

Как уже говорил выше, количество здоровья не повышает вашу живучесть для ловушек, но что её повышает – это регенерация здоровья. Если есть возможность взять дополнительные пассивные навыки на регенерацию перед прохождением лабиринта – возьмите.

Также регенерацию здоровья значительно повышает:

  • Summon Stone Golem
  • Уникальный пояс

Напрямую к цели

Лабиринт имеет различные ответвления. Проходя их я не понял в чем особое преимущество их прохождения (дополнительный ключик, по сравнении с вероятностью потерять персонажа на ловушках – не прельщает вообще).

Полезные предметы

Есть предметы, которые помогут в прохождении лабиринта. Из полезных я выделил пока два:

  • Уникальный амулет Власть крови (Bloodgrip) – дает 100% увеличенное количество восстанавливаемого здоровья флаконами, а также кровотечение во время движения не наносит вам дополнительный урон
  • Уникальный пояс Бессмертная плоть (Immortal Flesh) – дает 66.6 - 75 восстановления здоровья в сек.

Если знаете другие полезные предметы – пишите в комментариях.

Попробовать на следующий день

Каждый новый день лабиринт генерируется по-новому, а также изменяется версия Изария (Izaro). Если вам никак не удается пройти лабиринт или победить босса – попробуйте сделать это на следующий день.

Доброго времени суток, уважаемое сообщество.

Предыстория

В один прекрасный день, гуляя просторами интернета, был найден лабиринт. Интересно стало узнать его прохождение и погуляв еще по сети, я так и не нашел, рабочей программной реализации, решения лабиринта.

Вот собственно и он:

Рабочий день был скучный, настроение было отличное. Цель, средства и желание имеются. Вывод очевиден, будем проходить.

История

Для удобного решения, необходимо имеющееся изображение лабиринта, привести к типу двумерного массива. Каждый элемент которого может принять одно из 3-ех значений:

Const WALL=-1; BLANK=-2; DEADBLOCK=-3;

Наперед, хочу показать функции для сканирования изображения лабиринта с последующей записью данных в массив, и функцию генерации нового изображения, на основании данных из массива:

Сканирование изображения:

Var N:integer=600; LABIRINT:array of integer; ... var bit:TBitmap; i,j:integer; begin bit:=TBitmap.Create; If OpenDialog1.Execute then begin bit.LoadFromFile(OpenDialog1.FileName); for i:=0 to N do for j:=0 to N do if bit.Canvas.Pixels=clWhite then LABIRINT:=BLANK else LABIRINT:=WALL; bit.Free; ... end; end; ...

Генерация изображения:

Var N:integer=600; LABIRINT:array of integer; ... procedure genBitmap; var bit:TBitmap; i,j:Integer; begin bit:=TBitmap.Create; bit.Width:=N+1; bit.Height:=N+1; for i:=0 to N do for j:=0 to N do begin if LABIRINT=BLANK then bit.Canvas.Pixels:=clWhite // else if LABIRINT=WALL then bit.Canvas.Pixels:=clBlack else bit.Canvas.Pixels:=clRed; end; bit.SaveToFile("tmp.bmp"); bit.Free; end; ...

Для начала, необходимо пересохранить изображение, как монохромный bmp, для того, чтоб иметь 2 цвета белый или черный. Если присмотреться к лабиринту, то он имеет стенку толщиной в 2 пикселя, а дорогу толщиной в 4 пикселя. Идеально было бы сделать, чтоб толщина стенки и дороги была 1 пиксель. Для этого необходимо перестроить изображение, разделить изображение на 3, то есть удалить каждый 2рой и 3тий, ряд и столбик пикселей из рисунка (на правильность и проходимость лабиринта это не повлияет).

Подготовленный рисунок:

Ширина и высота изображения: 1802 пикселя.

1. Используем функцию сканирования изображения.
2. Перестраиваем изображение:

Var N:integer=1801; LABIRINT:array of integer; ... procedure rebuildArr2; var i,j:integer; begin for i:=0 to ((N div 3)) do for j:=0 to ((N div 3)) do LABIRINT:=LABIRINT; N:=N div 3; end; ...

3. Генерируем перестроенное изображение.

Результат работы процедуры:

Ширина и высота изображения: 601 пиксель.

И так, у нас есть изображение лабиринта нужного вида, теперь самое интересное, поиск всех вариантов прохождения лабиринта. Что у нас есть? Массив с записанными значениями WALL - стена и BLANK - дорога.

Была одна неудачная попытка найти прохождение лабиринта с помощью волнового алгоритма. Почему неудачная, во всех попытках данный алгоритм приводил к ошибке «Stack Overflow». Я уверен на 100%, что используя его, можно найти прохождение, но появился запал придумать что-то более интересное.

Идея пришла не сразу, было несколько реализаций прохождения, которые по времени, работали приблизительно по 3 минуты, после чего пришло озарение: «а что, если искать не пути прохождения, а пути которые не ведут к прохождению лабиринта и помечать их как тупиковые».

Алгоритм такой:
Выполнять рекурсивную функцию по всем точкам дорог лабиринта:
1. Если мы стоим на дороге и вокруг нас 3 стены, помечаем место где мы стоим как тупик, в противном случае выходим из функции;
2. Переходим на место которое не является стенкой из пункта №1, и повторяем пункт №1;

Программная реализация:

Var N:integer=600; LABIRINT:array of integer; ... procedure setBlankAsDeadblockRec(x,y:integer); var k:integer; begin k:=0; if LABIRINT=blank then begin if LABIRINT<><><><>BLANK then k:=k+1; if k=4 then LABIRINT:=DEADBLOCK; if k=3 then begin LABIRINT:=DEADBLOCK; if LABIRINT=BLANK then setBlankAsDeadblockRec(x-1,y); if LABIRINT=BLANK then setBlankAsDeadblockRec(x,y-1); if LABIRINT=BLANK then setBlankAsDeadblockRec(x+1,y); if LABIRINT=BLANK then setBlankAsDeadblockRec(x,y+1); end; end; end; procedure setDeadblock; var i,j:integer; begin for i:=1 to N-1 do for j:=1 to N-1 do setBlankAsDeadblockRec(i,j); end; ...

Заключение

Я получил «полный» рабочий алгоритм, который можно использовать для поиска всех прохождений лабиринта. Последний по скорости работы превзошел все ожидания. Надеюсь моя маленькая работа, принесет кому-то пользу или подтолкнет к новым мыслям.

Программный код и пройденный лабиринт:

//Прошу не бить ногами за использованный язык программирования. unit Unit1; interface uses Windows, Graphics, Forms, Dialogs, ExtCtrls, StdCtrls, Controls, Classes; const WALL=-1; BLANK=-2; DEADBLOCK=-3; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; N:integer=600; LABIRINT:array of integer; implementation {$R *.dfm} procedure genBitmap; var bit:TBitmap; i,j:Integer; begin bit:=TBitmap.Create; bit.Width:=N+1; bit.Height:=N+1; for i:=0 to N do for j:=0 to N do begin if LABIRINT=BLANK then bit.Canvas.Pixels:=clWhite // else if LABIRINT=WALL then bit.Canvas.Pixels:=clBlack else bit.Canvas.Pixels:=clRed; end; bit.SaveToFile("tmp.bmp"); bit.Free; end; procedure rebuildArr2; var i,j:integer; begin for i:=0 to ((N div 3)) do for j:=0 to ((N div 3)) do LABIRINT:=LABIRINT; N:=N div 3; end; procedure setBlankAsDeadblockRec(x,y:integer); var k:integer; begin k:=0; if LABIRINT=blank then begin if LABIRINT<>BLANK then k:=k+1; if LABIRINT<>BLANK then k:=k+1; if LABIRINT<>BLANK then k:=k+1; if LABIRINT<>BLANK then k:=k+1; if k=4 then LABIRINT:=DEADBLOCK; if k=3 then begin LABIRINT:=DEADBLOCK; if LABIRINT=BLANK then setBlankAsDeadblockRec(x-1,y); if LABIRINT=BLANK then setBlankAsDeadblockRec(x,y-1); if LABIRINT=BLANK then setBlankAsDeadblockRec(x+1,y); if LABIRINT=BLANK then setBlankAsDeadblockRec(x,y+1); end; end; end; procedure setDeadblock; var i,j:integer; begin for i:=1 to N-1 do for j:=1 to N-1 do setBlankAsDeadblockRec(i,j); end; procedure TForm1.Button1Click(Sender: TObject); var bit:TBitmap; i,j:integer; begin bit:=TBitmap.Create; If OpenDialog1.Execute then begin bit.LoadFromFile(OpenDialog1.FileName); for i:=0 to N do for j:=0 to N do if bit.Canvas.Pixels=clWhite then LABIRINT:=BLANK else LABIRINT:=WALL; bit.Free; setDeadblock; genBitmap; end; end; end.

Для поиска кратчайшего пути, планируется применить волновой алгоритм к найденным прохождениям лабиринта. Было-бы интересно услышать, какие еще алгоритмы можно применить, для быстрого поиска пути в большом лабиринте?

Найдите вещь, которую можно использовать, чтобы помечать каждую тропу. Важно, чтобы выбранное приспособление подходило для того, чтобы делать пометки на полу лабиринта. Например, на твердой поверхности, такой как дерево или бетон, можно использовать мел. В случае других поверхностей подумайте, что вы можете оставить после себя, например, хлебные крошки или камешки.

  • Какой бы предмет вы ни использовали, у вас должна быть возможность сделать два разных вида маркировки. Вам нужно различать пути: какие вы прошли один раз, а какие - два.

Выберите случайную тропу и следуйте по ней до следующего перекрестка. У каждого лабиринта своя планировка на старте. Некоторые могут начинаться с перекрестка, а в других будет только одна тропа. В любом случае выберите любую тропу и идите вперед, пока не достигнете перекрестка или тупика.

Отмечайте тропы по мере их прохождения. Чтобы алгоритм Люка-Тремо сработал, очень важно отслеживать, какие тропы вы уже прошли. Обязательно отмечайте начало и конец каждой тропы любым выбранным для этого способом.

  • Если вы идете по тропе в первый раз, вам нужно сделать на ней одну пометку. Если вы пользуетесь мелом, достаточно начертить одну простую линию. Если вы используете предметы, например, горсть камешков, оставляйте по камешку в начале и в конце тропы.
  • Если вы идете по тропе во второй раз, отметьте ее еще раз. При использовании мела нарисуйте вторую линию, а в случае с предметами просто оставьте второй позади.
  • Если вы зашли в тупик, пометьте тропу, чтобы распознать ее как тупиковую. Например, если вы используете мел, пометьте тропу буквой «Т». Сделайте эту пометку рядом с перекрестком, к которому ведет тропа.
  • На перекрестках отдавайте предпочтение тропам без пометок. Всякий раз выходя на перекресток, выделяйте минутку, чтобы осмотреть пометки на каждой тропе. Некоторые из них могут быть без пометок, в то время как другие покажут, что вы выбирали их уже один раз (или два). Стоит отдавать предпочтение тропам без пометок. Так вы с большей вероятностью будете продвигаться вперед. Если все тропы отмечены по одному разу, выберите одну наугад.

    Избегайте троп, отмеченных дважды. Если вы вынуждены идти по тропе, которую вы уже отметили один раз, вам стоит отметить ее и во второй раз. Согласно алгоритму Люка-Тремо, тропа с двойной пометкой не приведет вас к выходу. Если вы нашли перекресток, где одна тропа отмечена дважды, всегда выбирайте другой путь, даже если это будет означать, что придется возвращаться назад.

    Вернитесь назад, если наткнулись на тупик. Если вы зашли в тупик, вам нужно вернуться к последнему перекрестку, который вы пересекли. Не забудьте пометить тропу, чтобы помнить, что она ведет в тупик. Как только доберетесь до перекрестка, выберите среди оставшихся троп одну и продолжайте пересекать лабиринт.

    Вот такая картинка сейчас бродит по всему интернету. Зачастую это сопровождается таким текстом: "В израильской военной разведке есть специальное подразделение, в котором служат юноши и девушки, страдающие разными нарушениями аутического спектра. Аутисты занимаются в основном анализом карт и аэрофотоснимков, появляющихся на экранах компьютеров. В силу особенностей мышления они обращают внимание на мельчайшие подробности, учет которых при подготовке военных операций на местности позволяет не допустить возможных потерь личного состава. Таким образом аутисты-разведчики спасают жизни солдат."

    Вы пробовали проходить этот лабиринт?

    Давайте выясним подробнее этот вопрос..

    еще при упоминании этого лабиринта уточняется, что "Аутист способен обрабатывать визуальную и текстовую информацию в несколько раз быстрее, чем человек, не страдающий заболеваниями аутического спектра. Эта их особенность оказалась незаменимой в хайтеке. В датской компании Specialisterne, специализирующейся на технологическом консультировании, 75 процентов работников - аутисты и люди, у которых диагностирован синдром Аспергера, также относящийся к аутическому спектру. От обычных работников они отличаются невероятным вниманием к деталям, сверхчеловеческой сосредоточенностью, способностью быстро обрабатывать огромные массивы информации. Эти умения особенно полезны для тестировщиков программ. Качество работы аутистов, занимающихся этой работой, в несколько раз выше, чем качество работы обычных людей. Аутисты могут проверить техническую документацию на 4000 страниц в 10 раз быстрее обычных людей и не пропустить ни одной ошибки."

    Но оставим в стороне аутистови выясним в конце концов как можно пройти этот лабиринт! А вот как...

    Задача нерешаема! У нас 3 комнаты с нечетным количеством дверей (аналогия с рисунками "не отрывая карандаша"). Что бы задача имела решение необходимо, что бы было не более 2 точек(в нашем случае комнат) с нечетным количеством линий (в нашем случае проходов)

    Если построить граф этого лабиринта, то мы увидим, что это Эйлеров путь, так как у него 3 вершины с нечётным числом рёбер (дверей), а для выполнения условий теста их может быть только две.

    Проблема семи мостов Кёнигсберга или Задача о кёнигсбергских мостах (нем. Königsberger Brückenproblem ) - старинная математическая задача, в которой спрашивалось, как можно пройти по всем семи мостам Кёнигсберга, не проходя ни по одному из них дважды. Впервые была решена в 1736 году немецким и русским математиком Леонардом Эйлером.

    Издавна среди жителей Кёнигсберга была распространена такая загадка: как пройти по всем мостам (через реку Преголя), не проходя ни по одному из них дважды. Многие кёнигсбержцы пытались решить эту задачу как теоретически, так и практически, во время прогулок. Впрочем, доказать или опровергнуть возможность существования такого маршрута никто не мог.

    В 1736 году задача о семи мостах заинтересовала выдающегося математика, члена Петербургской академии наук Леонарда Эйлера, о чём он написал в письме итальянскому математику и инженеру Мариони от 13 марта 1736 года. В этом письме Эйлер пишет о том, что он смог найти правило, пользуясь которым, легко определить, можно ли пройти по всем мостам, не проходя дважды ни по одному из них. Ответ был «нельзя».

    На упрощённой схеме части города (графе) мостам соответствуют линии (дуги графа), а частям города - точки соединения линий (вершины графа). В ходе рассуждений Эйлер пришёл к следующим выводам:


    • Число нечётных вершин (вершин, к которым ведёт нечётное число рёбер) графа должно быть чётно. Не может существовать граф, который имел бы нечётное число нечётных вершин.

    • Если все вершины графа чётные, то можно, не отрывая карандаша от бумаги, начертить граф, при этом можно начинать с любой вершины графа и завершить его в той же вершине.

    • Граф с более чем двумя нечётными вершинами невозможно начертить одним росчерком.

    Граф кёнигсбергских мостов имел четыре (синим) нечётные вершины (то есть все), следовательно, невозможно пройти по всем мостам, не проходя ни по одному из них дважды.

    Созданная Эйлером теория графов нашла очень широкое применение в транспортных и коммуникационных системах (например, для изучения самих систем, составления оптимальных маршрутов доставки грузов или маршрутизации данных вИнтернете).

    В 1905 году был построен Императорский мост, который был впоследствии разрушен в ходе бомбардировки во время Второй мировой войны. Существует легенда о том, что этот мост был построен по приказу самого кайзера, который не смог решить задачу мостов Кёнигсберга и стал жертвой шутки, которую сыграли с ним учёные умы, присутствовавшие на светском приёме (если добавить восьмой мост, то задача становится разрешимой). На опорах Императорского моста в 2005 году был построенЮбилейный мост. На данный момент в Калининграде семь мостов, и граф, построенный на основе островов и мостов Калининграда, по-прежнему не имеет эйлерова пути

    Вот еще такой вариант решения предлагал xlazex

    Посмотрим на картинку1: окружим квадратами каждую отдельную часть, исключим "лишние" точки, т.е. те точки, использование которых повысило бы возможное количество путей, и исключение которых не повлияет на количество дверей, пройденных линией и замкнутость контура. За начало пути возьмем, к примеру, точку 2 .
    Посмотрим на картинку2: на ней я изобразил тот же контур, но так, чтобы были виднее связи начальной точки с последующими. На изображении явно видно, что часть контура, обведенная синим цветом не может быть единожды замкнута, т.е. даже если бы эта часть контура была единственна, то не существовало бы путей, по которым можно было бы построить замкнутую линию.
    Итог: задача не имеет решения в двумерной системе координат.

    Но есть же решение в трехмерной:-)

    Ну ладно, шутка, шутка...

  • error: