题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动

时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移
动到某人心中的目标状态。
题解:状态数量最多2^16,算上转移的复杂度还是绰绰有余,可以直接bfs。
#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f;
} const int dis[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
const int p[4][4]={{1,2,4,8},{16,32,64,128},{256,512,1024,2048},{4096,8192,16384,32768}};
char s[4][4],s2[4][4];
int d[65537],to=0,beg=0;
int q[600005],top=0,tail=0;inline bool check(int x,int a,int b){return ((x&a)>0)==((x&b)>0);}void solve(int num,int x,int y)
{int xx,yy,ans=d[num]+1;for(int i=0;i<4;i++){xx=x+dis[i][0];yy=y+dis[i][1];if(xx<0||yy<0||xx>=4||yy>=4||check(num,p[x][y],p[xx][yy]))continue;int t=num^p[x][y]^p[xx][yy];if(d[t]>ans){d[t]=ans;q[++top]=t;}}
}int main()
{for(int i=0;i<4;i++)scanf("%s",s[i]);for(int i=0;i<4;i++)scanf("%s",s2[i]);for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(s2[i][j]=='1')to+=p[i][j];for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(s[i][j]=='1')beg+=p[i][j];for(int i=0;i<65536;i++) d[i]=20000000;d[beg]=0;q[++top]=beg;while(top!=tail){int u=q[++tail];for(int i=0;i<4;i++)for(int j=0;j<4;j++)solve(u,i,j);}cout<<d[to];return 0;
}

转载于:https://www.cnblogs.com/FallDream/p/bzoj1054.html

[bzoj1054][HAOI2008]移动玩具相关推荐

  1. bzoj 1054: [HAOI2008]移动玩具.cpp

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2260  Solved: 1254 [Submit][St ...

  2. [HAOI2008]移动玩具

    这又是一道神奇的搜索题...只要记录每种状态...然后暴力判断这种状态往后一步的情况... 广搜出最优解即可... 呆码: #include<iostream> #include<c ...

  3. BZOJ 1054: [HAOI2008]移动玩具(bfs)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...

  4. 提高篇 第一部分 基础算法 第4章 广搜的优化技巧

    LOJ 一本通一句话题解系列: - ~victorique~ - 博客园 LOJ 一本通一句话题解系列: - ~victorique~ - 博客园 「一本通 1.4 例 1」电路维修 电路维修 (广搜 ...

  5. 2019.3.summary

    emmmm,把以前写的2b总结丢上来吧,不过应该也不会有人看QAQ (注:因为用txt写的,有一些公式打的很随意,放到markdown上公式自动排版,有可能会显示出错误!可在下方留言) 2019.2. ...

  6. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  7. python中关键字参数含义_python中接受任意关键字的参数

    1.*args args是非关键字参数,可以理解为形参,为了方便记忆我理解它是arguments的缩写. 2.*kwargs kwargs是键值对参数,为了方便记忆我理解它是key word argu ...

  8. 语法入门*算法入门题单

    作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...

  9. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

最新文章

  1. 一元二次方程实根java_请依次输入一元二次方程的三个系数,并点击计算显示实根...
  2. 本周Github项目精选:高效CNN推理库、多款AlphaGo实现
  3. 多个线程作用于同一个runnable对象
  4. sublime unable to save 没有那个文件或者目录
  5. xms跨平台基础框架 - 基于.netcore
  6. python set |_Python事件类| set()方法与示例
  7. Quartz2D知识点聚合案例
  8. 思维 || Make It Equal
  9. 1、数列求值 - 2019年第十届蓝桥杯大赛软件类省赛
  10. indesign里怎么打根号_三相电是如何产生的?怎么接线?
  11. Springboot
  12. POWERBUILDER -- PB通过URL下载局域网或者互联网上的图片或者文件
  13. 云计算与大数据” 研讨会:迎来新的科学价值
  14. sis最新ip地址2020入口一_2020最新大厂内部 PHP 高级工程师面试题汇总(一)
  15. 清华大学计算机系2016名单,清华大学2016年自主招生北京考生入选名单汇总
  16. 新浪微博正在审核的开发者平台应用添加测试账号
  17. 连连跨境支付独立站收款,最高90天提现0费率!
  18. 实习总结与收获(2021.6.7-2021.8.27)
  19. bootloader学习笔记---第一篇以stm32为例
  20. Simulink自动代码生成:如何标准化的建模?以MAB,MISRA C 2012建模规范为例

热门文章

  1. 理解面向过程和面向对象的程序设计方法
  2. USCACO Buy Low, Buy Lower
  3. java 头尾 队列_超详细的java集合讲解
  4. mysql sql语句编码_SQL语句实用例子 MySQL编码设置
  5. springboot 打包_springboot项目打包上传至阿里云服务器
  6. 稍等片刻 正在提取文件_三亚种子罐市场价,中药提取浓缩设备的价格
  7. 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别
  8. keras 的 example 文件 imdb_bidirectional_lstm.py 解析
  9. 4.1 ucGUI 图片显示方法
  10. 【Pandas库】(6) 索引操作--改、查、高级索引