迷路ソルバー 戻る
数理・統計

迷路ソルバー — 経路探索アルゴリズム可視化

BFS・DFS・A*・Dijkstraの4アルゴリズムを迷路上でリアルタイムアニメーション。探索ノード数・経路長・計算時間を比較して、各アルゴリズムの特性を直感的に理解しよう。

迷路設定

アルゴリズム

アニメーション速度

統計

凡例

通路(未探索)
フロンティア(探索中)
訪問済み
最短経路
スタート
ゴール

理論メモ

計算結果
探索ノード
0
経路長
迷路
迷路を生成してください
理論・主要公式

$$f(n) = g(n) + h(n)$$

A*アルゴリズムの評価関数:\(g(n)\) スタートからのコスト、\(h(n)\) ゴールへの推定コスト(ヒューリスティック)

$$h(n) = |x_n - x_{goal}| + |y_n - y_{goal}|$$

マンハッタン距離ヒューリスティック:グリッド迷路で最適

$$O(b^d) \text{ (BFS)}, \quad O(b^{d/2}) \text{ (双方向BFS)}$$

計算量:\(b\) 分岐係数、\(d\) 解の深さ

迷路ソルバー — 経路探索アルゴリズム可視化とは

🙋
迷路を解くアルゴリズムって、BFSとかDFSとか聞きますけど、どうやって見分けるんですか?シミュレーターで違いがわかるようにするには?
🎓
大まかに言うと、探索の「広げ方」が大きく異なるんだ。BFS(幅優先探索)はスタート地点から同心円状に広がっていくイメージ。だから、このシミュレーターで「BFS」を選んで実行すると、水がじわーっと広がるようにマスが塗られていくのが見えるよ。上の「サイズ」スライダーで迷路を小さくして、まずはBFSだけ動かしてみるとわかりやすい。
🙋
え、そうなんですか!じゃあDFSはその逆で、とにかく一本道を突き進む感じ?でも、それだと最短経路を見つけられないこともあるって聞いたのですが…。
🎓
その通り!DFS(深さ優先探索)は行き止まりにぶつかるまで一直線に進む。シミュレーターで「DFS」を選ぶと、細長く枝分かれしながら塗られていく様子が観察できる。確かに、最初に見つけた経路が最短とは限らない。でも、全ての経路を調べ上げる必要がある問題や、メモリ消費が少ない場面では役に立つんだ。BFSとDFSを同じ迷路で実行して、右下に表示される「探索ノード数」と「経路長」を比べてみると、違いがはっきりするよ。
🙋
なるほど!でも、A*やDijkstraって、BFSやDFSより「賢い」って聞きます。シミュレーター上ではどんな風に「賢さ」が表現されるんですか?
🎓
いいところに気が付いたね。A*は「ゴールの方向を予測しながら」探索するんだ。だから、無駄な広がりが少なく、素早く最短経路にたどり着く。シミュレーターで「A*」を実行すると、ゴールに向かってほぼ一直線に近い形で探索領域が伸びていくのがわかる。特に、迷路の「サイズ」を大きくして複雑にすると、BFSやDFSに比べて「計算時間」が圧倒的に短いことを実感できるはずだ。これが「ヒューリスティック」という知恵の力だね。

よくある質問

はい、画面上のグリッドをクリックまたはドラッグすることで壁の配置を自由に編集できます。また、サイズ変更メニューから迷路の縦横マス数を調整可能です。迷路をランダム生成する機能も用意されています。
BFSはキューを用いて近いノードから均等に探索し、DFSはスタックで一方向を深く優先します。A*とDijkstraはコストに基づき探索しますが、A*はゴール方向の推定コストも加味するため、より効率的に経路を見つけます。
ブラウザの負荷や迷路の形状、スタート・ゴール位置によって探索ノード数が変わるためです。特にA*はヒューリスティック関数の精度に依存し、Dijkstraは均等に広がるため迷路が複雑だと差が顕著になります。
本ツールは格子状の静的な迷路を前提としています。実環境では障害物が動いたり、移動コストが不均一な場合があるため、D* Liteなどの動的計画アルゴリズムやセンサ情報の統合が必要です。あくまで基礎理解用としてご利用ください。

実世界での応用

CAEメッシュ解析:有限要素法(FEM)で作成された複雑なメッシュにおいて、特定の要素から別の要素への接続性を調べたり、クラック(き裂)の伝播経路を予測するのにグラフ探索アルゴリズムが使われます。例えば、BFSで損傷領域の広がりをシミュレートできます。

流体管路ネットワーク:工場や建物内の配管システムで、ポンプから目的地までの最も効率的な流路(圧力損失が最小の経路)をDijkstra法で探索し、設計に活用します。

ロボット・自動運転の経路計画:周囲の地図やセンサーデータをグリッド(格子)化し、障害物を避けながら目標地点まで移動する最短・最適経路を、A*アルゴリズムなどを用いてリアルタイムで計算します。

構造トポロジー最適化:材料の配置を最適化するプロセスで、多数の設計候補の中から性能目標を満たす構造を見つける「探索」問題として、DFS的なアプローチが応用されることがあります。

よくある誤解と注意点

このシミュレーターを使い始めるとき、いくつか気をつけてほしいポイントがあるよ。まず、「A*が常に最速」とは限らないということ。確かにヒューリスティックのおかげで効率的だけど、迷路が非常に単純(例えば、壁がほとんどない広い空間)な場合、ヒューリスティック計算のオーバーヘッドで、シンプルなBFSに負けることもあるんだ。ツールで「サイズ」を小さくして「壁の密度」を0%に近づけて試してみると、体感できるはず。

次に、ヒューリスティック関数の選択が結果を左右する。例えば、対角線移動が許可されていない迷路でユークリッド距離を使うと、実際のコストを過小評価してしまい、探索範囲が不必要に広がる可能性がある。NovaSolverではマンハッタン距離を使っているからこそ、グリッド状の迷路で効力を発揮するんだ。実装するときは、問題の構造に合った距離指標を選ぶことが特に重要。

最後に、「探索ノード数」と「計算時間」は比例しないという落とし穴。DFSはノード数をあまり訪れずに深く進むから、一見「軽そう」に見えるけど、行き止まりからのバックトラックが頻繁だと、かえって処理時間がかかる場合がある。特に複雑な迷路で「計算時間」の表示を比べてみると、アルゴリズムごとの内部処理の重さの違いがわかって面白いよ。

使い方ガイド

  1. 迷路サイズを10×10から50×50の範囲で選択し、「maze-sizeNum」パラメータで格子数を決定する
  2. BFS・DFS・A*・ダイクストラ法から探索アルゴリズムを選択して、「開始」ボタンをクリック
  3. 「speedNum」で探索速度を0.5倍~3倍の範囲で調整し、リアルタイムで経路探索の過程を観察する
  4. 探索完了後、訪問ノード数・計算時間・最短経路長を比較表で確認する

具体的な計算例

30×30迷路(900セル)でA*アルゴリズムを実行した場合、訪問ノード数は約180ノード、計算時間2.3ms、最短経路長42ステップ。同じ迷路をDFSで探索すると訪問ノード数520ノード、計算時間8.7msで到達し、A*がヒューリスティック関数により約65%の探索削減を達成することが確認できます。

実務での注意点