继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

搜索——Red and Black(hdu1312)

九日王朝
关注TA
已关注
手记 180
粉丝 42
获赞 185

题目链接:

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;}


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP