牛客小白月赛13 G(双向搜索)
AC通道
两边同步搜,一步里面A走一次B走两次,遇到对方走过的地方就得到了答案。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1001;
const int tx[] = {-1, 1, 0, 0, -1, -1, 1, 1};
const int ty[] = {0, 0, -1, 1, -1, 1, -1, 1};
int N, M, Ax, Ay, Bx, By;
bool vis[2][maxn][maxn];
char maze[maxn][maxn];
queue<pair<int, int>> Q[2];
bool bfs(int t) {
    int control = Q[t].size();
    while (control--) {
        auto tmp = Q[t].front(); Q[t].pop();
        for (int i = 0; i < 8 - 4 * t; i++) {
            int x = tmp.first + tx[i];
            int y = tmp.second + ty[i];
            if (x < 0 || x >= N || y < 0 || y >= M || maze[x][y] == '#')
                continue;
            if (vis[1 - t][x][y])    return 1;
            if (!vis[t][x][y])    Q[t].push({x, y}), vis[t][x][y] = 1;
        }
    }
    return 0;
}
int solve() {
    Q[0].push({Ax, Ay});
    Q[1].push({Bx, By});
    vis[0][Ax][Ay] = 1;
    vis[1][Bx][By] = 1;
    int step = 0;
    while (!Q[0].empty() || !Q[1].empty()) {
        step++;
        if (bfs(0))    return step;
        if (bfs(1))    return step;
        if (bfs(1))    return step;
    }
    return -1;
}
int main() {
    scanf("%d %d", &N, &M);
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            getchar();
            maze[i][j] = getchar();
            if (maze[i][j] == 'C')    Ax = i, Ay = j;
            if (maze[i][j] == 'D')    Bx = i, By = j;
        }
    }
    int ans = solve();
    if (ans >= 0)    printf("YES\n%d\n", ans);
    else    puts("NO");
    return 0;
}
牛客小白月赛13 G(双向搜索)的更多相关文章
- 牛客小白月赛2 G 文 【模拟】
		链接:https://www.nowcoder.com/acm/contest/86/G来源:牛客网 题目描述 Sεlιнα(Selina) 开始了新一轮的男友海选.她要求她的男友要德智体美劳样样都全 ... 
- 牛客小白月赛6 G 指纹锁 set的自动排序 模板
		链接:https://www.nowcoder.com/acm/contest/136/G来源:牛客网 题目描述 HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁. ... 
- 牛客小白月赛13 小A买彩票 (记忆化搜索)
		链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ... 
- 牛客小白月赛13  	小A的柱状图(单调栈)
		链接:https://ac.nowcoder.com/acm/contest/549/H来源:牛客网 题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的 ... 
- 牛客小白月赛13 小A的回文串(Manacher)
		链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 题目描述 小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的.所以小A只想知道给定的一个 ... 
- 牛客小白月赛13 小A的最短路(lca+RMQ)
		链接:https://ac.nowcoder.com/acm/contest/549/F来源:牛客网 题目描述 小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径.小A从当前的一个 ... 
- 牛客网 牛客小白月赛2 G.文
		G.文 链接:https://www.nowcoder.com/acm/contest/86/G 这个题wa了一发,有点智障,浮点数,式子里面要*1.0,忘了,然后wa了,改了就过了(脑子有坑) 代码 ... 
- 牛客小白月赛1   G	あなたの蛙は旅⽴っています【DP】
		题目链接 https://www.nowcoder.com/acm/contest/85/G 思路 按照题解上的方式 存取数据 然后DP一下 就可以了 AC代码 #include <cstdio ... 
- 牛客小白月赛1 G	あなたの蛙は旅⽴っています【图存储】【DP】
		题目链接:https://www.nowcoder.com/acm/contest/85/G 思路: DP 空间可以优化成一维的, 用一维数组的 0 号单元保存左斜对角的值即可. 存图这里真不好理解 ... 
随机推荐
- struts2的结果类型
			1.从struts-default.xml入手,得到结果类型列表以及对应的处理类: <result-types> <!-- 转发到action --> <result-t ... 
- SoundHound Inc. Programming Contest 2018
			A - F Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement You are give ... 
- P3515 [POI2011]Lightning Conductor[决策单调性优化]
			给定一序列,求对于每一个$a_i$的最小非负整数$p_i$,使得$\forall j \neq i $有$ p_i>=a_j-a_i+ \sqrt{|i-j|}$. 绝对值很烦 ,先分左右情况单 ... 
- bzoj 2850: 巧克力王国 K-D树
			题目大意 http://www.lydsy.com/JudgeOnline/problem.php?id=2850 题解 对于每个人,我们发现它能够接受的巧克力中 如果对参数分别讨论,那么一定是一个连 ... 
- Enum定义位域, 即可以通过位操作来产生未命名的值
			通过FlagsAttribute可以实现. // A bit field or flag enumeration of harvesting seasons. [Flags] public enum ... 
- Python3解leetcode Single Number
			问题描述: Given a non-empty array of integers, every element appears twice except for one. Find that sin ... 
- ReSIProcate环境搭建
			1首先下载resiprocate-1.6 2取消resiprocate-1.6目录的只读属性 3然后使用Visual Studio 2008打开resiprocate-1.6下的reSIProcate ... 
- BOM——浏览器对象模型(Browser Object Model)
			什么是BOM? BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对 ... 
- matlab函数 bwperim
			功能:查找二值图像的边缘. 用法: BW2 = bwperim(BW1) BW2 = bwperim(BW1,conn) BW2 = bwperim(BW1,conn)表示从输入图像BW1中返回只包括 ... 
- Linux 切换字符界面和图形界面
			1. 切换方式 # root 权限 systemctl get-default # 获取当前模式 systemctl set-default graphical.target # 设置开机为图形界面 ... 
