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)相关推荐

  1. 启明云端直播来了!真的来了!15号晚7:30分启明云端带着8ms菇凉正式亮相立创直播,带你一起畅玩彩屏!参与直播互动的小伙伴将会得到红包大奖及获得SigmarstarSSD201开发板\核心板的机会

    直播入口,请扫二维码 最近我们这新来了一个招牌菇凉,肤白貌美,如沉鱼落雁一般.不知各位小哥哥可否有兴趣? 此菇凉乃何许人也 菇凉名为8ms(www.8ms.xyz),是一个为开发者提供的免费的跨平台快 ...

  2. 有这样一个可爱的菇凉,叫TokenClub!

    有这样一个可爱的菇凉,叫TokenClub! 未来通证经济是一匹野马! 相遇 一个朋友给我发微信,叫我半个小时之后来他家喝酒,他告诉我,现在坐在家门口的马路牙子上,让他感到爱情的姑娘让他哥哥搬走了他的 ...

  3. 祈澈菇凉的高端知识资源分享星球开通

    写在前面的话 不知道从什么时候开始,把在工作过程中遇到的一些bug的解决办法截图发出来,成功运行实现项目需求的一些代码记录下来,学习过程之中的一些操作步骤,遇到过的简单方便的工具,都记录下来,有很多人 ...

  4. 《变量》精髓:慢变量造就时代进步大趋势, 在慢变量中找到小趋势,能坚定我们前进的信心

    <变量>书中的精髓:慢变量造就时代进步大趋势, 在慢变量中找到小趋势,能坚定我们前进的信心 心理学上,有一个著名的实验,叫"看不见的大猩猩".这个实验是这样的:参加测试 ...

  5. bjfu 1143 小蝌蚪安家(bfs入门)

    本人的第一题bfs搜索: 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. Input 有多组输入数据,每组第一行包 ...

  6. 1689: 营救小明(bfs+priority_queue逆向思维)

    1689: 营救小明 时间限制: 1 Sec 内存限制: 32 MB [提交][状态][讨论版] 题目描述 一天,小明梦见自己被外星人抓走了,他被关在了一座监狱里,这座监狱形如N*M(N,M<= ...

  7. 代码详解|如何快速从硬盘里找到小电影?

    看电影还要找豆瓣?别人的喜好怎能左右你的欢心- 豆瓣评分不靠谱,关键时刻得自己动手! 本文将手把手教你打造一个专属电影机器人,它能根据你的要求来推荐电影.科幻悬疑恐怖还是爱情文艺小清新,统统hold住 ...

  8. 南阳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 ...

  9. 这4点教你找到小程序专业开发公司

    如今小程序开发已不罕见,越来越多的线下商家需要布局线上渠道,小程序是一个非常好的选择.但是,对于不懂任何技术.也没有自身技术团队的小白而言,若想拥有自己的小程序,就需要找靠谱的微信小程序开发公司,但是 ...

  10. 计算机组成存储单元地址分配,【计算机组成原理】主存中存储单元地址的分配/大小端方式/按字节(字)寻址云笙菇凉的博客-...

    本文写的很详细,搞了很久才理解这块的东西,如有错误请指出. 为了方便理解,先补充一些知识 8位十六进制=32位二进制 字地址=存储字地址=存储单元地址 1字节=8位二进制 字(word)是一次存取,加 ...

最新文章

  1. 关于编码的一切【转载】
  2. Java移除ssl认证_Java SSL证书吊销检查
  3. Java - Jackson JSON Java Parser API
  4. OpenResty快速入门
  5. 引入其他配置文件(分模块开发)
  6. Python super 函数 - Python零基础入门教程
  7. python报考软考哪个比较好_软考高级考哪个好?哪个比较热门?
  8. 【计算机视觉-从入门到精通系列】 第三章 立体匹配
  9. Java2实用教程第五版课后习题解析(持续更新,适合初学者)
  10. 混响时间测试软件安卓版,混响时间的测量方法资料.pdf
  11. 当新华社遇上华为云 权威新闻全球传播再添“神器”
  12. windows恶意软件删除工具 MRT.EXE
  13. 利用计算机制作多媒体最后一步,计算机多媒体技术在影视后期制作的运用
  14. dmg是什么文件格式_什么是DMG文件(以及我该如何使用)?
  15. 【记录一次windows技术学习】使用笔记本DOS命令搭建WLAN热点
  16. 【AI绘图】来体验了下AI绘图
  17. @Value注解从配置文件中读取数组
  18. 嵌入式测试大赛预选赛
  19. boss直聘账号异常登不上_python爬虫Scrapy:爬取boss数据
  20. Maven Dependencies missing jar 解决方法

热门文章

  1. jupyter notebook更换浏览器一直不成功
  2. 数据分析师和数据工程师的区别是什么?
  3. 笔记本连不上网(IPV4和IPV6无网络访问权限)解决方法
  4. plc通过无线通讯连接服务器,PLC无线通讯
  5. 根据王小云教授的算法写的MD5碰撞的程序[c源代码]
  6. pt100热电阻计算公式C语言,牛顿法在Pt100铂热电阻温度计算中的应用特性分析
  7. 全国通用 专升本计算机基础(简答题背诵可用)
  8. 计算机数字控制的机械手臂,90后国人自主研发桌面级机械臂,太牛了~
  9. 虚拟机内安装金蝶K3环境
  10. 2014年感悟:一万年太久,只争朝夕