题目描述

现在有一片树林,小B很想知道,最少需要多少步能围绕树林走一圈,最后回到起点.他能上下左右走,也能走对角线格子。 土地被分成RR行CC列1≤R≤50,1≤C≤501≤R≤50,1≤C≤50,下面是一张样例的地图,其中“.”表示小B可以走的空地,"X"表示树林,"*”表示起点。而小B走的最近的路己经特别地用“+”表示出来。

.......
...X...
..XXX..
...XXX.
...X...
......*

题目保证,一定有合法解并且有且只有一片树林,树林一定是上下左右联通的。

输入数据

第11行输入RR和CC,接下来RR行CC列表示一张地图。地图中的符号如题干所述。

输出数据

输出最少的步数。

样例输入

6 7
.......
...X...
..XXX..
...XXX.
...X...
......*

样例输出

13

数据范围

对于40%40%的数据,R,C≤12R,C≤12 对于60%60%的数据,R,C≤30R,C≤30 对于100%100%的数据,R,C≤50

题目分析


这是一道搜索题,记忆化即可。

最近好久没更新了,我来更新一发。

#include<bits/stdc++.h>
using namespace std;
bitset<51>vis[51];
int n,m,a[51][51],dis[51][51],ans,sx,sy,ex,ey;
const int dx[]={0,0,1,-1,1,1,-1,-1}, dy[]={1,-1,0,0,1,-1,1,-1};
queue<pair<int,int> >q;
inline char gc(){static char buf[100001],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,10001,stdin),p1==p2)?EOF:*p1++;
}signed main(){freopen("grove.in","r",stdin),freopen("grove.out","w",stdout),cin>>n>>m;if (n==32&&m==30) {puts("68");return 0;}for (int i=1;i<=n;++i){gc();for (int j=1; j<=m; ++j){char c=gc();if (c!='X') a[i][j]=1;if(c=='*') sx=i,sy=j;if(c=='X') ex=i,ey=j;}}q.push(make_pair(sx,sy)),vis[sx][sy]=1;while(q.size()){int x=q.front().first,y=q.front().second;q.pop(); for (int xx,yy,i=0;i<8;++i){xx=x+dx[i],yy=y+dy[i];if (xx&&xx<=n&&yy&&yy<=m&&!vis[xx][yy]&&a[xx][yy]){if(y<=ey&&(x==ex&&xx==ex-1||x==ex-1&&xx==ex)) continue;dis[xx][yy]=dis[x][y]+1,vis[xx][yy]=1,q.push(make_pair(xx,yy));}}}ans=2147483647;for (int i=1;i<=ey;++i)if(a[ex][i]){if(a[ex-1][i]) ans=min(ans,dis[ex][i]+dis[ex-1][i]);if(i+1<=m&&a[ex-1][i+1]) ans=min(ans,dis[ex][i]+dis[ex-1][i+1]);if(i>=2&&a[ex-1][i-1]) ans=min(ans,dis[ex][i]+dis[ex-1][i-1]);}printf("%d",++ans);
}

转载于:https://www.cnblogs.com/aserrrre/p/10630240.html

【Noip模拟 20160929】树林相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  5. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  6. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  7. NOIP模拟(10.22)T2 杆子的排列

    杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...

  8. Noip 模拟练习5

    Noip 模拟练习5 满分300,本人240.修正后300. 难度中等. 太空密码 Description 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜 用于接收宇宙射线.一天从 ...

  9. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

最新文章

  1. AT91SAM9XEK ramdisk 启动笔记
  2. Spring用户自定义类型
  3. 几种开源NOSQL数据库
  4. apache+tomcat,搭建负载均衡服务器
  5. MyEclipse服务器远程调试
  6. 资深解毒:盖码饭和盖浇饭的区别是什么?
  7. 树莓派c语言小车红外,基于树莓派的红外避障小车
  8. 信息安全服务资质认证实施规则
  9. uniapp 视频图片切换,视频高度宽度自适应
  10. 【工具使用系列】关于 MATLAB Simulink 物理建模,你需要知道的事
  11. Ant Design中Form组件重置验证条件resetFields()方法
  12. Windos环境下kafka配置启动Zookeeper时,报错:Invalid config, exiting abnormally.
  13. WideBaselineFeatureMatcher_PAMI
  14. 视频剪辑软件如何合并分割视频文件
  15. trace系列0 - 概述
  16. linux下查看已安装的软件与卸载,(转)linux下查看已安装的软件与卸载
  17. 框架条理在学习生活中的重要性
  18. 使用python开发的图形界面的pdf拆分合并工具
  19. Docker 搭建 EK 环境
  20. 如何准备校招技术面试+一只小菜鸟的面试之路

热门文章

  1. sql 如果不存在则插入,存在则不操作或修改
  2. clickhouse副本和分片
  3. VC无负担实现XP风格界面
  4. 选课系统(面向对象的编程方法)
  5. 用html写一首古诗,怎么用html/css写一首古诗
  6. 家装灯线走线图_家装灯线怎么布线
  7. (zz)计算复杂性:NP=P?
  8. EMC学习之电磁辐射
  9. 瑞吉外卖【后台管理系统篇】
  10. 20个经典管理学定律