迷宫算法的基本解题思路就是:递归算法
分析:走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。
用1代表墙壁,0代表路径。1----wall;0----path
注:当走过该店后,也置为1,表示已经走过了,不能再走该点。
代码部份:
#include <iostream>
using namespace std;
void visit(int, int);
int maze[9][9] = {{1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 1},
{1, 0, 1, 0, 0, 1, 0, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 1, 0, 1},
{1, 1, 0, 1, 1, 0, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1}};
int startI = 1, startJ = 1; // 入口
int endI = 7, endJ = 7; // 出口
int Answer = 0;
int main(void) {
visit(startI, startJ);
if( 1 == Answer)
{
cout <<"Maze have exit."<<endl;
}
else
{
cout <<"There is no way for maze to exit."<<endl;
}
return 0;
}
void visit(int i, int j)
{
maze[i][j] = 1;
if(i == endI && j == endJ)
{
Answer = 1;
}
if(Answer != 1 && maze[i][j+1] == 0) visit(i, j+1); //按照优先级右,下,左,上的寻址路径进行遍历
if(Answer != 1 && maze[i+1][j] == 0) visit(i+1, j);
if(Answer != 1 && maze[i][j-1] == 0) visit(i, j-1);
if(Answer != 1 && maze[i-1][j] == 0) visit(i-1, j);
if(Answer != 1)//如果递归完之后把之前走过的路径再赋值为0
{
maze[i][j] = 0;
}
}