C++ の迷路ソルバー
迷路を解くアルゴリズムは、コンピューター サイエンスと人工知能の古典的な問題です。
C++ の迷路ソルバー
迷路を解くアルゴリズムは、コンパスの 4つの方向にのみ移動して、最初から最後までの最短経路を見つけることを目的としています。 アルゴリズムは、まだ訪問されていないすべてのノードを含むオープン リストと、訪問されたすべてのノードを含むクローズ リストの 2つの情報セットを維持します。
迷路内のあるノードから別のノードへのパスを見つけるには、次のことを行う必要があります。
-
開いているノードが現在のノードに隣接 (左または右) しているかどうかを確認します。
-
そうでない場合は、閉じたノードが現在のノードに隣接 (左または右) しているかどうかを確認します。
-
そうでない場合は、1つ前の手順に戻り、手順 1 と 2 をもう一度実行します。
迷路解決アルゴリズムの例:
#include <iostream>
using namespace std;
bool demo_maze(char maze[9][9], bool sam[9][9], int x, int y, int u, int v) {
if (x == u && y == v) {
sam[x][y] = true;
for (int t = 0; t <= u; t++) {
for (int f = 0; f <= v; f++) {
cout << sam[t][f] << " ";
}
cout << endl;
}
cout << endl;
return true;
}
if (x > u || y > v) return false;
if (maze[x][y] == 'X') return false;
sam[x][y] = true;
bool right = demo_maze(maze, sam, x, y + 1, u, v);
bool down = demo_maze(maze, sam, x + 1, y, u, v);
sam[x][y] = false;
if (right || down) return true;
return false;
}
int main() {
char maze[9][9] = {"0000", "00X0", "000X", "0X00"};
bool sam[9][9] = {0};
int u = 3, v = 3;
bool ans = demo_maze(maze, sam, 0, 0, u, v);
}
ここをクリック 上記のコードの動作を確認します。
C++ での Maze Solver の使用
迷路解決アルゴリズムは、チェス、マインスイーパ、マップ上の迷路やその他の障害物を通る経路の検索など、多くの目的に使用できます。 このアルゴリズムは、道に迷って森や迷路から抜け出す方法を探しているときに、進むべき道を決定することができます!
迷路を解くアルゴリズムは 2D ゲームにも使用されますが、計算が複雑なため、他のアルゴリズムよりも時間がかかります。 再帰関数を使用して、プレーヤーの座標を確認し、次の場所に移動します。
再帰関数は、直接的または間接的に自分自身を呼び出します。 再帰の問題を解くのに使えますし、解が短いループとして表現しにくい問題を解くのにも使えます。
Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.
Facebook