Хм, вы знаете номер фактической комнаты. Таким образом, вы можете построить структуру данных. Я полагаю, что к списку выходов не привязаны номера комнат. Но, выбрав случайным образом, вы знаете, по крайней мере, что есть связь.
Допустим, вы находитесь в комнате 4 и выберите один из трех случайных выходов. Теперь система сообщает вам, что вы находитесь в комнате 6 и у вас остался только один выход. Вы выбираете это и возвращаетесь в комнату 4. На данный момент вы собрали некоторую информацию о структуре лабиринта. Теперь вы выбираете другой выход и заканчиваете в комнате 5. Моя информация о комнате 4 (один выход в 6, один выход в 5)
Можете ли вы выбрать конкретный выход? они пронумерованы, скажем, если в комнате 4 вы выбираете выход, который всегда заканчивается 6? В противном случае вы по крайней мере можете узнать о возможных маршрутах.
Хорошо, просто прочитайте ваш комментарий. Поэтому, если у выходов есть идентификаторы, и они статически связаны с комнатой (даже если вы не знаете, какой из них для начала), вы просто выбираете новый и запоминаете соединения выхода / комнаты и помните, какой выход уже был опробован. Попробуйте не проверенные выходы, пока не обыщите каждую комнату.
Таким образом, это на самом деле просто. После нескольких шагов у вас должен быть более или менее полный список соединений. Только когда вы входите в новую комнату, вы можете (на несколько шагов) бегать вокруг случайно. Но с каждым шагом вы получаете больше информации, и всякий раз, когда вы заходите в ранее посещенную комнату, вы можете принять более разумное решение (не проверять тупиковую комнату 6 снова, например, когда вы возвращаетесь к 4, поскольку у нее нет выходов, которые не проверялись).
Редактировать
Идея состоит в том, чтобы сначала сделать случайные шаги и записать информацию, которую вы найдете, как я описал (описание Дэна более сжато). Если вы оказались в комнате без неизвестных выходов, вы можете использовать любой известный указатель пути, чтобы найти кратчайший путь к комнате, у которой есть выходы, которые вы еще не исследовали.
Не уверен на 100%, но я думаю, что Питер Норвиг написал о подобной проблеме (лабиринт Wumpus) в своей книге «Искусственный интеллект: современный подход». Хотя, если я правильно помню, речь шла не столько о поиске пути, сколько о принятии решений относительно некоторой информации, которую система могла получить о соседних комнатах.
Редактировать:
Нет, это не только случайно. Отслеживая уже проверенные выходы, вы удаляете ненужную избыточность. На самом деле вам даже не нужно выбирать случайно.
Предположим, вы начинаете в комнате 4. Информация, которую вы получаете: 3 выхода A, B, C. Вы всегда выбираете первый, который теперь не используется, выход. Итак, начните с A. Вы заканчиваете в комнате 6. Теперь вы помните 4A => 6 (и использовали) в комнате 6, вы получаете информацию 1, выход A. Снова вы выбираете первый неиспользованный (и в данном случае только выход) Назад в комнату. для знания 6A => 4 (и больше никаких выходов в комнате 6) Теперь вы выбираете следующий выход B и достигаете комнату 5 ...
Рано или поздно вы обыщите все комнаты таким образом. Но в систематическом вопросе.
Единственная причина, по которой вам понадобится найти путь, - это когда вы оказались в комнате, где все выходы уже исследованы. Тогда вы захотите найти прямой путь к следующей комнате с неисследованными выходами, чтобы продолжить поиск. Таким образом, основная хитрость заключается не в том, чтобы узнать, какой выход ведет в какую комнату (хотя это может быть полезно), а в том, чтобы отслеживать еще не опробованные выходы.
Таким образом, например, вы можете избежать постоянного бега по кругу, что может привести к риску чисто случайного подхода.
В вашем примере лабиринт это, скорее всего, не имеет большого значения. Но в большом лабиринте с множеством комнат и подключений и, возможно, хитроумными комнатами с круглой структурой эта система гарантирует, что вы найдете выход с как можно меньшим количеством испытаний.
(Я думаю, что это та же система, что и Byte56 в Gamers)