找到小菇凉 (BFS)
Description
天凉了,小菇凉天天被扇子妈关在家里不让她到处跑。小菇凉觉得很无聊。这天,趁着扇子妈出门,小菇凉偷偷溜出门去玩。因为太久没出门太开心了,小菇凉一不小心就跑到了很远的地方,很晚都没有回家。扇子妈妈很担心,于是找到小光头问他是否看到小菇凉。小光头知道小菇凉会跑到很远的森林里去玩,于是决定帮扇子妈去找小菇凉。天色已经很晚了,小光头希望尽快找到小姑凉。
Input
输入第一行两个整数N,M(1 <= N,M <= 1000)表示森林的大小。
接下来一个N*M的矩阵由“#”,“.”组成。“#”表示该地为高灌木,小光头不能通过。“.”表示该地为空地,小光头能通过。地图上仅有一个“A”表示小姑凉的位置,一个“B”表示小光头的位置。
Output
当小光头能看到小菇凉时(即小光头和小菇凉在同行或同列,中间没有障碍时)表示小光头找到了小菇凉。若小光头能找到小菇凉,输出最快找到小菇凉的时间。若不能找到小菇凉,输出No!!!
Sample Input
5 5 ...A# ##... ..B## ##### .....
Sample Output
2
思路:
bfs .典型的BFS,最开始我们学习BFS迷宫问题是找到目标点,停止扩展,任务结束,退出循环。
本题就是把结束条件换成 同行或同列 && 中间不能有障碍物。那么主要任务是写个check函数判断找到了。
我的方法是从上下左右四个方向进行枚举。
#include <cstdio>
#include <queue>
using namespace std;
const int inf = 0x3f3f3f3f;
int a[1005][1005];
int book[1005][1005];
int dx[]={0, 1, 0, -1};
int dy[]={1, 0, -1, 0};
int n, m;
struct node { int x, y, s;node(int _x = 0, int _y = 0, int _s = 0) : x(_x), y(_y), s(_s) {}
};
int check(int tx,int ty,int p,int q) { int x, y; x = tx; y = ty; while(a[x][y] != 1 && x >= 1 && x <= n && y >= 1 && y <= m) { if(x == p && y == q) return 1;x--; } x = tx; y = ty; while(a[x][y] != 1 && x >= 1 && x <= n && y >= 1 && y <= m) { if(x == p && y == q) return 1;x++; } x = tx; y =ty; while(a[x][y] != 1 && x >= 1 && x <= n && y >= 1 && y <= m) { if(x == p && y == q) return 1;y--; } x = tx; y = ty; while(a[x][y] != 1 && x >= 1 && x <= n && y >= 1 && y <= m) { if(x == p && y == q) return 1;y++; } return 0;
}
int distance(int sx,int sy,int ex,int ey) { int flag=0; queue<node> q; q.push(node(sx, sy, 0)); book[sx][sy]=1; while(!q.empty()) { node now = q.front(); q.pop(); for(int k = 0; k <= 3; k++) { int tx = now.x + dx[k]; int ty = now.y + dy[k]; if(tx < 1 || tx > n || ty < 1 || ty > m)continue; if(a[tx][ty] == 0 && book[tx][ty] == 0) { book[tx][ty]=1; q.push(node(tx, ty, now.s + 1)); } if(check(tx, ty, ex, ey)) { flag = 1; break; } } if(flag) return now.s + 1; } return inf;
} int main() { char ch; int x1,y1,x2,y2; scanf("%d%d",&n,&m); for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) { scanf(" %c",&ch); if(ch == '.')a[i][j] = 0; else if(ch == '#')a[i][j] = 1; else if(ch =='B') { a[i][j] = 0; x1 = i; y1 = j; } else if(ch == 'A') { a[i][j] = 0; x2 = i; y2 = j; } }int time = distance(x1, y1, x2, y2); if(time == inf) printf("No!!!"); else printf("%d\n",time); return 0;
}
找到小菇凉 (BFS)相关推荐
- 启明云端直播来了!真的来了!15号晚7:30分启明云端带着8ms菇凉正式亮相立创直播,带你一起畅玩彩屏!参与直播互动的小伙伴将会得到红包大奖及获得SigmarstarSSD201开发板\核心板的机会
直播入口,请扫二维码 最近我们这新来了一个招牌菇凉,肤白貌美,如沉鱼落雁一般.不知各位小哥哥可否有兴趣? 此菇凉乃何许人也 菇凉名为8ms(www.8ms.xyz),是一个为开发者提供的免费的跨平台快 ...
- 有这样一个可爱的菇凉,叫TokenClub!
有这样一个可爱的菇凉,叫TokenClub! 未来通证经济是一匹野马! 相遇 一个朋友给我发微信,叫我半个小时之后来他家喝酒,他告诉我,现在坐在家门口的马路牙子上,让他感到爱情的姑娘让他哥哥搬走了他的 ...
- 祈澈菇凉的高端知识资源分享星球开通
写在前面的话 不知道从什么时候开始,把在工作过程中遇到的一些bug的解决办法截图发出来,成功运行实现项目需求的一些代码记录下来,学习过程之中的一些操作步骤,遇到过的简单方便的工具,都记录下来,有很多人 ...
- 《变量》精髓:慢变量造就时代进步大趋势, 在慢变量中找到小趋势,能坚定我们前进的信心
<变量>书中的精髓:慢变量造就时代进步大趋势, 在慢变量中找到小趋势,能坚定我们前进的信心 心理学上,有一个著名的实验,叫"看不见的大猩猩".这个实验是这样的:参加测试 ...
- bjfu 1143 小蝌蚪安家(bfs入门)
本人的第一题bfs搜索: 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. Input 有多组输入数据,每组第一行包 ...
- 1689: 营救小明(bfs+priority_queue逆向思维)
1689: 营救小明 时间限制: 1 Sec 内存限制: 32 MB [提交][状态][讨论版] 题目描述 一天,小明梦见自己被外星人抓走了,他被关在了一座监狱里,这座监狱形如N*M(N,M<= ...
- 代码详解|如何快速从硬盘里找到小电影?
看电影还要找豆瓣?别人的喜好怎能左右你的欢心- 豆瓣评分不靠谱,关键时刻得自己动手! 本文将手把手教你打造一个专属电影机器人,它能根据你的要求来推荐电影.科幻悬疑恐怖还是爱情文艺小清新,统统hold住 ...
- 南阳58--最小步数(BFS)
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- 这4点教你找到小程序专业开发公司
如今小程序开发已不罕见,越来越多的线下商家需要布局线上渠道,小程序是一个非常好的选择.但是,对于不懂任何技术.也没有自身技术团队的小白而言,若想拥有自己的小程序,就需要找靠谱的微信小程序开发公司,但是 ...
- 计算机组成存储单元地址分配,【计算机组成原理】主存中存储单元地址的分配/大小端方式/按字节(字)寻址云笙菇凉的博客-...
本文写的很详细,搞了很久才理解这块的东西,如有错误请指出. 为了方便理解,先补充一些知识 8位十六进制=32位二进制 字地址=存储字地址=存储单元地址 1字节=8位二进制 字(word)是一次存取,加 ...
最新文章
- 关于编码的一切【转载】
- Java移除ssl认证_Java SSL证书吊销检查
- Java - Jackson JSON Java Parser API
- OpenResty快速入门
- 引入其他配置文件(分模块开发)
- Python super 函数 - Python零基础入门教程
- python报考软考哪个比较好_软考高级考哪个好?哪个比较热门?
- 【计算机视觉-从入门到精通系列】 第三章 立体匹配
- Java2实用教程第五版课后习题解析(持续更新,适合初学者)
- 混响时间测试软件安卓版,混响时间的测量方法资料.pdf
- 当新华社遇上华为云 权威新闻全球传播再添“神器”
- windows恶意软件删除工具 MRT.EXE
- 利用计算机制作多媒体最后一步,计算机多媒体技术在影视后期制作的运用
- dmg是什么文件格式_什么是DMG文件(以及我该如何使用)?
- 【记录一次windows技术学习】使用笔记本DOS命令搭建WLAN热点
- 【AI绘图】来体验了下AI绘图
- @Value注解从配置文件中读取数组
- 嵌入式测试大赛预选赛
- boss直聘账号异常登不上_python爬虫Scrapy:爬取boss数据
- Maven Dependencies missing jar 解决方法