文章目录

  • 题目信息
  • 解题思路
  • 代码实现(有错待改,注释待加)

题目信息

题目传送门

解题思路

在这道题中,我们肯定会想到用bfs找最短路的想法。但是,并不是所有棋子的状态都是需要记录哒(这样就会TMLE得更多啦)。在棋子移动的过程中,除了和目标棋子换的时候,空的位置已知可以和别的棋子换,所以我们只需要记录空的位置和目标棋子的位置就ok啦。

代码实现(有错待改,注释待加)

#include <bits/stdc++.h>
using namespace std;
const int N = 30;
const int dir[2][4] = {1, -1, 0, 0, 0, 0, 1, -1};
int a[N][N];
bool vis[N][N][N][N];
struct node {// 起始坐标以及结束坐标1int ex, ey, tx, ty;int stp;node() { }node(int _ex, int _ey, int _tx, int _ty, int _stp) {ex = _ex;ey = _ey;tx = _tx;ty = _ty;stp = _stp;}
};
queue<node> Q;
int n, m, q;
inline bool in(node u) {return 0 <= u.ex && u.ex < n && 0 <= u.ey && u.ey < m;
}
int main() {cin >> n >> m >> q;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> a[i][j];}}while (q--) {int ex, ey, sx, sy, tx, ty;cin >> ex >> ey >> sx >> sy >> tx >> ty;// 起点和终点相等,0步到达if (sx == tx && sy == ty) {cout << 0 << '\n';continue;}// 重置memset(vis, false, sizeof vis);// 起点标记vis[ex][ey][sx][sy] = true;while (Q.size()) {Q.pop();}// 起点入队Q.push(node(ex, ey, sx, sy, 0));// 结果int res = -1;while (Q.size() && res == -1) {node u = Q.front();Q.pop();for (int i = 0; i < 4; ++i) {// 下一个点node v = u;++v.stp;if (v.ex + dir[0][i] == v.tx && v.ey + dir[1][i] == v.ty) {swap(v.ex, v.tx);swap(v.ey, v.ty);} else {v.ex += dir[0][i];v.ey += dir[1][i];}if (!in(v) || !a[v.ex][v.ey] || vis[v.ex][v.ey][v.tx][v.ty]) {continue;}if (v.tx == tx && v.ty == ty) {res = v.stp;break;}vis[v.ex][v.ey][v.tx][v.ty] = true;Q.push(v);}}cout << res << '\n';}return 0;
}

NOIP2013提高组华容道题解相关推荐

  1. 【题解】P1979 [NOIP2013 提高组] 华容道(SPFA,BFS,常数优化)

    [题解]P1979 [NOIP2013 提高组] 华容道 最近打比赛次次挂..平均每周得被至少一场比赛打击一次(这周好不容易 ABC 打的还行模拟赛又挂--)心烦意乱.写篇题解疏散一下内心的苦闷(雾) ...

  2. P1979 [NOIP2013 提高组] 华容道

    题目来源 [NOIP2013 提高组] 华容道 - 洛谷 题目考点 搜索   图论 题目 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, ...

  3. NOIP2013 提高组复赛解题报告

    NOIP2013 提高组复赛 day1 day\;1 1002. 火柴排队 贪心+数据结构/归并排序 这个"相邻交换"让我联想到了NOIP2012_day1_task2_game那 ...

  4. #185. [NOIP2016 提高组] 蚯蚓题解

    #185. [NOIP2016 提高组] 蚯蚓题解 题目描述 本题中,我们将用符号 ⌊c⌋\lfloor c \rfloor⌊c⌋ 表示对 ccc 向下取整,例如:⌊3.0⌋=⌊3.1⌋=⌊3.9⌋= ...

  5. 【NOIP2013提高组】花匠

    题目背景 NOIP2013 提高组 Day2 试题. 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空 ...

  6. 【NOIP2013提高组】火柴排队

    题目背景 NOIP2013 提高组 Day1 试题 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定 ...

  7. 【NOIP2013提高组】积木大赛

    题目背景 NOIP2013 提高组 Day2 试题 题目描述 春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为 1  ...

  8. 凡人升天传7——NOIP2010 提高组复赛题解

    本蒟蒻在考试时最后一道直接报零*__*,悲痛欲绝,因此在这里著下本题解. 可恶的西西弗 虽然题目做的很垃圾,但在写题解中途不得不感叹除了最后一道,其他真是好水题呀!!! --------------- ...

  9. [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)

    一开始觉得是网络流..仔细一看应该是最短路,再看数据范围..呵呵不会写...这道题是最大生成树+最近公共祖先.第一次写..表示各种乱.. 因为要求运输货物质量最大,所以路径一定是在最大生成树上的.然后 ...

  10. 【NOIP2013提高组T3】加分二叉树

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...

最新文章

  1. QIIME 2用户文档. 5粪菌移植分析练习Fecal microbiota transplant (FMT) study
  2. 坑!只要年轻博士,薪资按考核结果发放, 高校的博后制度,究竟有多少门道?...
  3. Angular 内容投影 content projection 的一个问题的单步调试
  4. 右侧快速入口滑动时左侧跟着变化
  5. NodeJS stream 一:Buffer
  6. jar包的概念及作用
  7. 什么叫泛域名ssl证书
  8. UiPath Excel 复制粘贴
  9. 解读iOS 11新版App Store:如何玩转新版App Store,提升产品下载量?
  10. 电子物流中的EDI 应用
  11. iTween基础之iTweenPath(自定义路径移动)
  12. 基础才是王道——TCP/IP详解学习笔记 这位仁兄写得太好了
  13. MD5加密算法(转)
  14. java网络编程的三要素
  15. 移动端h5开发分辨率自适应
  16. Linux攻关之基础模块五 Vim
  17. 信安软考 第十九章 操作系统安全保护
  18. 学习笔记:python爬虫(第一次写笔记,多多包涵)
  19. C语言.h文件的作用
  20. 【Google Earth Studio】进阶编辑技巧

热门文章

  1. DM8168外挂IC卡读写异常
  2. 20个Java小项目,献给嗜学如狂的人,拿来练练手
  3. Python手册(Python Basics)--Python基础
  4. 京东推荐系统实践——打造千人千面的个性化推荐引擎
  5. python全栈自动化测试工程师第11期柠檬班vip_因为Python,班主任最近都开始化妆了!...
  6. 主力吸筹猛攻指标源码_通达信主力吸筹提款副图指标 源码
  7. 18个黑科技网站,你想要的软件都能找到,请收藏!!!
  8. Spine 3.8.75报错不能打开:Sorry, an unexpected error has occured. 日志显示Version cannot be null
  9. Cadence PSpice 模型5:基于ABM库创建XC6209稳压芯片的PSpice模型实战图文教程
  10. 北风网Ant+Java视频课程