题目链接:http://agc014.contest.atcoder.jp/tasks/agc014_c

题意:略。

题解:第一遍bfs找到所有可以走的点并标记步数,看一下最少几步到达所有没锁的点,然后再

for一遍所有标记过的点之后就是考虑向上走向左走向右走向下走(直走)。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int M = 1e3;
char mmp[M][M] , s[M][M];
int h , w , k , step[M][M] , dr[4][2] = {1 , 0 , -1 , 0 , 0 , 1 , 0 , -1};
struct TnT {
int x , y , step , flag;
};
bool vis[M][M];
void bfs(TnT sta) {
memset(step , 0 , sizeof(step));
step[sta.x][sta.y] = 1;
memset(vis , false , sizeof(vis));
vis[sta.x][sta.y] = true;
queue<TnT>q;
q.push(sta);
while(!q.empty()) {
TnT gg = q.front();
q.pop();
for(int i = 0 ; i < 4 ; i++) {
TnT gl = gg;
gl.x += dr[i][0];
gl.y += dr[i][1];
if(gl.x >= 0 && gl.x < h && gl.y >= 0 && gl.y < w && mmp[gl.x][gl.y] != '#' && !vis[gl.x][gl.y]) {
gl.step++;
step[gl.x][gl.y] = gl.step;
vis[gl.x][gl.y] = true;
q.push(gl);
}
}
}
}
int main() {
scanf("%d%d%d" , &h , &w , &k);
for(int i = 0 ; i < h ; i++) {
scanf("%s" , mmp[i]);
}
TnT sta;
for(int i = 0 ; i < h ; i++) {
for(int j = 0 ; j < w ; j++) {
if(mmp[i][j] == 'S') {
sta.x = i , sta.y = j;
break;
}
}
}
sta.step = 0 , sta.flag = k;
bfs(sta);
int ans = 1000000000;
for(int i = 0 ; i < h ; i++) {
for(int j = 0 ; j < w ; j++) {
if(step[i][j] != 0) {
if(i == 0 || i == h - 1 || j == 0 || j == w - 1) {
int gg = step[i][j];
if(gg % k == 0) {
ans = min(ans , gg / k);
}
else {
ans = min(ans , gg / k + 1);
}
}
else {
int gg = step[i][j] , gl = 0;
if(gg % k == 0) {
gl = gg / k;
}
else {
gl = gg / k + 1;
}
gg = i;
if(gg % k == 0) {
ans = min(ans , gl + gg / k);
}
else {
ans = min(ans , gl + gg / k + 1);
}
gg = j;
if(gg % k == 0) {
ans = min(ans , gl + gg / k);
}
else {
ans = min(ans , gl + gg / k + 1);
}
gg = h - 1 - i;
if(gg % k == 0) {
ans = min(ans , gl + gg / k);
}
else {
ans = min(ans , gl + gg / k + 1);
}
gg = w - 1 - j;
if(gg % k == 0) {
ans = min(ans , gl + gg / k);
}
else {
ans = min(ans , gl + gg / k + 1);
}
}
}
}
}
printf("%d\n" , ans);
return 0;
}

Atcoder C - Closed Rooms(思维+bfs)的更多相关文章

  1. Atcoder Grand Contest 039B(思维,BFS)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int col[207],s[207],n;c ...

  2. Codeforces Round #297 (Div. 2) D. Arthur and Walls [ 思维 + bfs ]

    传送门 D. Arthur and Walls time limit per test 2 seconds memory limit per test 512 megabytes input stan ...

  3. Vladik and Favorite Game CodeForces - 811D (思维+BFS+模拟+交互题)

    D. Vladik and Favorite Game time limit per test 2 seconds memory limit per test 256 megabytes input ...

  4. Valid BFS? CodeForces - 1037D(思维 bfs)

    我真是一只菜狗......emm... 题意: 判断一个从1开始的队列是否可以按照bfs的顺序 进行遍历..必须从1开始...然后后边依次是bfs顺序 解析: 看代码能看懂吧...emm...就是把每 ...

  5. 魔戒(思维+bfs)

    Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...

  6. atcoder E - Jigsaw(思维)

    题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_e 题解:这题很巧妙运用了cnt[i]抽象的表示了上下互补的状态,最后上面突出的一定要处理完.下面 ...

  7. Atcoder C - +/- Rectangle(思维+构造)

    题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c 题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为 ...

  8. Atcoder F - Mirrored(思维+搜索)

    题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...

  9. CF543B Destroying Roads 枚举 + 思维 + BFS

    Code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in", ...

随机推荐

  1. Okhttp3 网络请求框架与 Gson

    Maven环境 : <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>o ...

  2. java多线程基础(二)--sleep(),wait,()yield()和join()方法

    1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”.不推荐使用. sleep()使当前线程进入阻塞状态,在指定时间内不会执行. 2.wait()方法 在其他线程调用 ...

  3. java学习中碰到的疑惑和解答(一)

    今天写一个接口的时候发现,接口的方法不需要写修饰符,直接写数据类型加上方法名(参数)即可通过编译. import java.util.List; import com.bjm.pojo.Flower; ...

  4. nginx负载均衡策略url_hash配置方法

    参考文章: https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/ 根据路径,进行一致性hash,具体的配 ...

  5. LeetCode——264. Ugly Number II

    题目: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fact ...

  6. pycharm的安装配置及思维导图

    1.1 计算机基础知识 主板:人的骨架,用于扩展设备的 cpu:人的大脑,用于计算和逻辑处理的 硬盘:存储数据(永久存储) 电源:人的心脏 内存:存储数据(临时存储) 断电即消失 操作系统 xp wi ...

  7. python案例:实现一个函数版的名片管理系统

    本案例使用了自定义函数以及对字符串的常见操作.判断语句和循环语句等知识. 要求 必须使用自定义函数,完成对程序的模块化. 名片信息至少包括:姓名.电话.住址. 必须完成的功能:增.删.改.查.退出. ...

  8. Java反射Reflect的使用详解

    目录 一. 什么是反射 二. 反射的基础Class 2.1 Class类概述 2.2 Class类对象获取的三种方式 三. 反射-构造函数 3.1 getDeclaredConstructor(Cla ...

  9. 如果有人问你 Dubbo 中注册中心工作原理,就把这篇文章给他

    注册中心作用 开篇首先想思考一个问题,没有注册中心 Dubbo 还能玩下去吗? 当然可以,只要知道服务提供者地址相关信息,消费者配置之后就可以调用.如果只有几个服务,这么玩当然没问题.但是生产服务动辄 ...

  10. 利用SSH端口转发实现远程访问内网主机远程桌面(一) 建立SSH转发

    近期家里更换了移动的宽带,拨号后拿到的是10开头的内网IP,就不能像之前一样通过路由器的端口映射实现从外网访问主机的远程桌面.这种情况下可以利用一台具有公网IP的服务器充当中转,利用SSH的隧道转发功 ...