1)'.':黑色的瓷砖;c语言递归,#C++初学记录(深度搜索#递归)

#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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值