/*
冼竞滔
递归算法求老鼠走迷宫一
老鼠走迷宫是递回求解的基本题型,
试以程式求出由入口至出口的路径,入口为左上角,出口为右下角。
███████(7×7)
█ ██
█ ███ █
█ █ █
█ █ █ █
█ █ █
███████//迷宫图
墙的表示:█ 路径的表示:◇
INPUT
(无)
OUTPUT
显示迷宫:
███████
█ ██
█ ███ █
█ █ █
█ █ █ █
█ █ █
███████
显示路径:
███████
█◇ ██
█◇███ █
█◇█◇◇◇█
█◇█◇█◇█
█◇◇◇█◇█
███████
问题分析:
可通过递归求解.
*/
/* 本例使用的是dev c++5.10 */
#include <iostream>
using namespace std;
const int Size = 7; // 地图尺寸
bool Win = false; // 判断是否找到终点
int Map[Size][Size] = { // 地图 2表示障碍物 1表示路径 0表示空路
{2,2,2,2,2,2,2},
{2,0,0,0,0,2,2},
{2,0,2,2,2,0,2},
{2,0,2,0,0,0,2},
{2,0,2,0,2,0,2},
{2,0,0,0,2,0,2},
{2,2,2,2,2,2,2}
};
// 显示迷宫
void ShowMap()
{
int i,j;
for(i=0;i<Size;i++)
{
for(j=0;j<Size;j++)
{
if(Map[i][j]==0) // 空路输出空格
cout<<' ';
else if(Map[i][j]==1) // 路径输出█
cout<<'█';
else if(Map[i][j]==2) // 障碍物输出◇
cout<<'◇';
}
cout<<endl;
}
}
// 寻找路径
void SearchPath(int x,int y)
{
if(x==Size-2 && y==Size-2) // 找到终点,结束
{
Map[x][y] = 1;
Win = true;
return;
}
if(Map[x][y]==0)
{
Map[x][y] = 1; // 当前点置为路径
if(Win==false && y+1<Size) SearchPath(x,y+1); // 向右 →
if(Win==false && y-1>=0) SearchPath(x,y-1); // 向左 ←
if(Win==false && x+1<Size) SearchPath(x+1,y); // 向下 ↓
if(Win==false && x-1>=0) SearchPath(x-1,y); // 向上 ↑
if(Win==false) Map[x][y] = 0; // 没找到终点重置当前点为空路
}
}
int main()
{
SearchPath(1,1);
ShowMap();
return 0;
}
Exercise(9):老鼠走迷宫
最新推荐文章于 2022-09-28 20:41:05 发布