难度:4
知识点:广度优先搜索

又解决一道,这道题首先状态很好想,就是一个四维数组,两个点的坐标共四个数来组成一个状态,起点状态终点状态也显而易见,然后是蜘蛛网,这个东西有点迷惑性,题目说的是如果踩了就失败,其实这玩意儿就是个路障,和障碍一样,你碰到了不走,就行,没有说非要你遇见了就去走,然后就是本题最难的一个点了,两个点的移动,

题目说了两个点是一起移动,如果其中一个点遇到了障碍,那么可以不动,只移动另外一个点,言外之意就是假如两个点都能移动的时候必须两个点都要移动,不能两个点都能移动的时候只移动其中一个,我一开始就是这个点没想到做错的,写了一个12维的增量数组,所以四个方向,每个方向三种情况,看似是12种,其实每个方向只有一种选择,要么两个都移动,要么移动其中一个,最后最多还是四种情况,每种情况都是每个方向上三选一,这个想明白了,题目里面说的退回操作就很好写了,

#include <bits/stdc++.h>#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) x.size())
#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;const int N = 35;int n, m, xm, ym, xg, yg, xt, yt;
int dx1[4] = {-1, 0, 1, 0}, dy1[4] = {0, 1, 0, -1};
int dx2[4] = {-1, 0, 1, 0}, dy2[4] = {0, -1, 0, 1};
string s[N];void bfs() {queue<pair<pa, pa> > q;q.push(mk(mk(xm, ym), mk(xg, yg)));int dist[N][N][N][N];fill((int*) dist, (int*) dist + N * N * N * N, -1);dist[xm][ym][xg][yg] = 0;while (!q.empty()) {pair<pa, pa> now = q.front(); q.pop();if (now == mk(mk(xt, yt), mk(xt, yt))) { cout << dist[xt][yt][xt][yt]; return; }for (int i = 0; i < 4; i++) {int x1 = now.fi.fi + dx1[i], y1 = now.fi.se + dy1[i];int x2 = now.se.fi + dx2[i], y2 = now.se.se + dy2[i];if (x1 < 0 || y1 < 0 || x1 >= n || y1 >= m) continue;if (x2 < 0 || y2 < 0 || x2 >= n || y2 >= m) continue;if (s[x1][y1] == '#' && s[x2][y2] == '#') continue;if (s[x1][y1] == '#') x1 -= dx1[i], y1 -= dy1[i];if (s[x2][y2] == '#') x2 -= dx2[i], y2 -= dy2[i];if (dist[x1][y1][x2][y2] > -1 || s[x1][y1] == 'X' || s[x2][y2] == 'X') continue;q.push(mk(mk(x1, y1), mk(x2, y2)));dist[x1][y1][x2][y2] = dist[now.fi.fi][now.fi.se][now.se.fi][now.se.se] + 1;}}cout << "no";
}int main() {cin >> n >> m;for (int i = 0; i < n; i++) {cin >> s[i];for (int j = 0; j < m; j++) {if (s[i][j] == 'G') { xg = i; yg = j; s[i][j] = '.'; }if (s[i][j] == 'M') { xm = i; ym = j; s[i][j] = '.'; }if (s[i][j] == 'T') { xt = i; yt = j; s[i][j] = '.'; }}}bfs();return 0;
}

P3855 [TJOI2008]Binary Land相关推荐

  1. [KSN2021] Binary Land

    题目链接:[KSN2021] Binary Land 我们可以发现,如果一个数字最高位之后有一个0,那么是可以连向某个对应位置最高位为1的数字. 然后这个不难想到可以对每一个二进制位建立虚点. 我们发 ...

  2. [KSN2021] Binary Land题解(位运算应用)

    P7973 [KSN2021] Binary Land [KSN2021] Binary Land 题目描述 给定一张 N N N 个点的图,每个点有权值 A i A_i Ai​ 和价值 B i B_ ...

  3. 【HDU - 5050 】Divided Land (Java大数,大数进制转换,大数gcd)

    题干: It's time to fight the local despots and redistribute the land. There is a rectangular piece of ...

  4. HDU 5050 Divided Land (二进制上的最大公约数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5050 题面: Divided Land Time Limit: 8000/4000 MS (Java/ ...

  5. 107. Binary Tree Level Order Traversal II

    题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...

  6. 102. Binary Tree Level Order Traversal

    题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...

  7. Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView

    今天创建了一个 demo ,然后就是复制RecyclerView 过去, 到最后完成运行的时候发现 系统奔溃了, 然后 提示 Binary XML file line #8: Error inflat ...

  8. Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin

    Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin 这个问题自己大致在 ...

  9. android.view.InflateException: Binary XML file line #7: Binary XML file line #7

    错误如下 11-21 08:19:44.040 3608-3608/com.leon.oldrecyclerview E/AndroidRuntime: FATAL EXCEPTION: main   ...

最新文章

  1. fzu - Problem 1759 Super A^B mod C
  2. 服务器开发设计之算法宝典
  3. 汇编语言(二十五)之成绩分段统计
  4. QT Core | 信号槽02 - GUI上按钮触发应用程序的函数(lambda表达式)
  5. 【补丁分析】CVE-2016-8610:对导致拒绝服务的“SSL Death Alert”漏洞补丁分析
  6. jQuery中each的用法之退出循环和结束本次循环
  7. 学完Linux之后学什么语言,学习C语言一段时间后我们能做什么?
  8. mysql8.x非注册使用[{绿色使用]
  9. if判断与while、for循环语句
  10. SAP中计划策略11测试
  11. 淘宝商品数据爬取并分析数据
  12. 给出n元置换群线性表示的一种方法
  13. ]计算机专业就业方向 .
  14. 奇数位升序偶数位降序链表排序
  15. 大数据应用“情感趋同现象”伦理风险问题刍议
  16. 本以为java语言很难学,其实就学完下面这些知识,就能理解了
  17. 计算机科学与技术考研辅导班,[独峰考研]清华大学计算机科学与技术考研辅导班-清华计算机系考研经验真题...
  18. GB(国标)字典大全
  19. AutoCAD 2014 新特性概览
  20. php apc 502,【案例】小心,apc可能导致php-fpm罢工!

热门文章

  1. 清凉-明智左马介秀满的一生
  2. 115道Java面试题
  3. Centos7命令行连接wifi网络,手机usb共享网络
  4. 背阔肌(05):史密斯机俯身划船
  5. 程序员debug三大定律
  6. 【UE4】如何把Excel数据导入数据表格DataTable以及使用方法
  7. Python_解一元二次方程
  8. Centos如何设置ip黑名单,防止被攻击
  9. nginx的max_fails的bug
  10. 计算机进去bios方式,两种使用的电脑进入BIOS方法