由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径。
只要在老鼠走至出口时显示经过的路径,然后退 回上一格重新选择下一个位置继续递回就可以了!
#include <iostream>
using namespace std;
int maze[9][9] = {
{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}
};
//始点(1,1),终点(7,7)
int startI=1,startJ=1;
int endI=7,endJ=7;
void visit(int,int);
int main()
{
int i,j;
cout<<"迷宫如下:\n\n";
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(maze[i][j]==2)
cout<<"O "; //X表示墙壁
else
cout<<" "; //I表示道路
}
cout<<endl;
}
visit(startI,startJ);
cout<<endl;
return 0;
}
void visit(int i,int j)
{
int m,n;
maze[i][j]=1; //当前位置标志为1
//如果当前位置位于终点处,则成功
if(i==endI && j==endJ)
{
cout<<"\n显示路径:\n";
for(m=0;m<9;m++)
{
for(n=0;n<9;n++)
{
if(maze[m][n]==2)
cout<<"O ";
else if(maze[m][n]==1)
cout<<"* ";
else
cout<<" ";
}
cout<<endl;
}
}
if(maze[i][j+1]==0)
visit(i,j+1);
if(maze[i+1][j]==0)
visit(i+1,j);
if(maze[i][j-1]==0)
visit(i,j-1);
if(maze[i-1][j]==0)
visit(i-1,j);
maze[i][j]=0;
}