バックグラウンド
最近PCゲーム「ダーケストダンジョン」をプレイしていた。ゲームでは、下の図に示すように、部屋がつながったダンジョンを探索する必要があります。
ルールは次のとおりです。
- 固定の部屋(入り口)から始めます。開始する場所を選択することはできません。
- 目標は、すべての部屋を少なくとも1回訪問することです
- 隣接する部屋間の距離は、すべての部屋で同じです。
- 部屋や散歩道は何度でも訪れることができます
質問
少なくとも一度はすべての部屋を訪れる入り口からの最短経路は何ですか?
サブ質問:
- この問題を解決するために使用できるアルゴリズムは何ですか?
- 私のような人が自由に(そしてかなり簡単に)使用できる実装はありますか?
私が試したこと
私はこれまたはこれのような他の質問を答えを見つけることなく見つけました。(基本的な)TSPに精通しており、簡単なTSPをコーディングして解決できます。ハミルトニアンパスは複数回の訪問を許可しないため、私の問題を解決しませんでした。中国の郵便配達の問題は、私はすべてのエッジを訪問する必要はありませんので、また、その基本的な形で、ここでは適用されません。
更新
コメントで述べたように、私はコンピュータサイエンティストではなく、数学的なステートメントを証明することにも興味がありません(おそらく、この質問を後でスタックオーバーフローに投稿します)。また、私はプログラマーではないため、自分でソリューションをコーディングできる可能性は非常に低くなっています。しかし、私はその性質の問題を扱う最初の人ではないと思います。
@Shreeshおよび@Dibによると、次の手順を適用できます。
- すべての部屋でペアワイズ距離行列を作成し、すべての部屋の間にエッジを追加します。
- 標準ソルバー(例:concorde)を使用してTSPを解く
- 入り口から始めて、解決策に従ってすべての部屋を訪れます。隣接していない部屋の場合は、それらの部屋の間の最短距離に置き換えます。
この手順は問題の答えを提供しますか?