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;
}

最新文章

  1. 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植
  2. _fastcall
  3. (C/C++) 基础问答题
  4. Java 基础-反射
  5. 换模板,修改了一下css,清新多了~
  6. vc2008程序发布指南
  7. 全局变量,extern和static以及命名空间的区别
  8. Maven第二篇【Idea下使用Maven】
  9. HTTP协议扫盲(二)HTTP协议的请求方法、请求头和响应头
  10. 不用局部变量实现C语言两数交换算法
  11. A - Subarrays Beauty gym 位运算 &amp;
  12. hive基础操作—(1)
  13. XShell 技巧
  14. 通过RF数据库查询中文字段结果正常显示的转换方法
  15. 三维dem
  16. BigDecimal.setScale用法总结
  17. July 21st 2017 Week 29th Friday
  18. JVM内存模型 三
  19. 【Flask】Sqlalchemy group_by having
  20. New Concept English there (60)

热门文章

  1. Linux学习之路(二)文件处理命令之上
  2. listen 68 Theoretical Physicist Stephen Hawking Dies at 76
  3. 1091 Acute Stroke (30)(30 分)
  4. Redis 客户端安装与远程连接图解
  5. Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)
  6. DS:template
  7. linux查询内存真是利用率
  8. Redux API之creatStore
  9. [hdu3586]Information Disturbing树形dp+二分
  10. [poj3417]Network(LCA+树形dp)