题目叙述:
请设计一走迷宫程式,输入地图后由程式自行走出迷宫,并印出离开迷宫时走过的路径。
使用递回实作演算法。
输入格式:
1)第一列有两个数字m、n,代表地图的大小。
2)接下来有 m * n 个以空格或断行分隔的数字,其值为 0 或 1。(注意:每一列储存n个数字,档案中总共会有 m * n 个数字来标示地图)
3)地图由 m * n 个位置组成,数值0 表示可走之位置,1 表示不可走之位置。
4)入口为 字母M,出口为 字母O。
5)如果无法走到出口请印出“无法离开”讯息。
以下给出具体实现代码:
#include<iostream>
using namespace std;
int max_x,max_y;
char map[105][105];
bool goon[105][105],ans;
void run(int y,int x)
{
if(x<0||x>=max_x||y<0||y>=max_y||ans==1)
{
return;
}
if(goon[y][x]==1||map[y][x]=='1')
{
return;
}
goon[y][x]=1;
printf("(%d, %d)\n", x, y);
if(map[y][x]=='O')
{
ans=1;
}
run(y-1,x);
run(y+1,x);
run(y,x-1);
run(y,x+1);
}
int main()
{
int i,j,start_x,start_y;
while(cin>>max_x>>max_y)
{
if(max_x==0&&max_y==0)
return 0;
for(i=0;i<max_y;i++)
{
for(j=0;j<max_x;j++)
{
cin>>map[i][j];
goon[i][j]=0;
if(map[i][j]=='M')
{
start_y=i;
start_x=j;
}
}
}
ans=0;
run(start_y,start_x);
if(ans)cout<<"可通過!\n";
else cout<<"無法離開!\n";
}
return 0;
}