#include
#include
using namespace std;
int n,m;
int step=0;//代表到达黑色瓷砖的块数
char maze[30][30];
bool vis[30][30];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//代表上下左右四个方向
//判断数组是否越界
bool in(int x,int y)
{
return 0<=x&&x
}
void dfs(int x,int y)
{
step++;
vis[x][y]=true;
for(int i=0;i<4;i++)
{
int tx=x+dir[i][0];//x的变化
int ty=y+dir[i][1];
if(!vis[tx][ty]&&maze[tx][ty]=='.'&&in(tx,ty))
{
dfs(tx,ty);
}
}
}
int main()
{
cin>>m>>n;
for(int i=0;i
{
for(int j=0;j
{
cin>>maze[i][j];
}
}
int x,y;
//寻找@的位置
for(int i=0;i
{
for(int j=0;j
{
if(maze[i][j]=='@')
{
x=i;
y=j;
}
}
}
dfs(x,y);
cout<
return 0;
}
代码理解
编写代码主要遇到的问题是如何让程序自己进行“行走”,因此我编辑代码int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
和
int tx=x+dir[i][0];
int ty=y+dir[i][1];
成为配套程序让程序自己进行“行走”。在“行走”的函数中这连个代码会帮助程序进行计数和行走,计数则需要加一个
step++;
行走在地图上首要考虑的是越界相关的问题,这时候就需要一个判定函数,该函数应该对重复路线,碰壁,范围进行判定,既是
bool in(int x,int y)
{
return 0<=x&&x
}
若return不成立则返回false,若成立则返回ture,与该函数进行匹配的程序是
vis[x][y]=true;
if(!vis[tx][ty]&&maze[tx][ty]=='.'&&in(tx,ty));
递归函数可以让程序自己不停的“行走”,直到完成整个运行输出step。