为了账号安全,请及时绑定邮箱和手机立即绑定

搜索——Red and Black(hdu1312)

标签:
算法

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1312

题目描述:

一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象为墙,然后.为可以走的空地,求人可以走的最大点数。 解题思路: 好吧,搜索入门题,直接广度搜索,标志入队的次数。入队的次数即为行走的步数。 


解题思路:基本属于深搜的水题了,每搜索一个方格就改变当前方格的值为 ‘*’,或者任何其他非'.'的值,代表该方格已经走过了,递归的时候就不用重复搜索这个方格了。


#include <stdio.h>#include <string.h>int n,m,ans;char map[30][30];int to[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};void dfs(int i,int j){ans++;map[i][j]='#';for(int k=0;k<4;k++){int x=i+to[k][0];int y=j+to[k][1];if(x<n&&y<m&&x>=0&&y>=0&&map[x][y]=='.')dfs(x,y);}return;}int main(){int i,j,fi,fj;while(~scanf("%d%d%*c",&m,&n)){if(!m&&!n)break;for(i=0;i<n;i++){for(j=0;j<m;j++){scanf("%c",&map[i][j]);if(map[i][j] == '@'){fi = i;fj = j;}}getchar();}ans=0;dfs(fi,fj);printf("%d\n",ans);}return 0;}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消