题面:

  https://www.lydsy.com/JudgeOnline/problem.php?id=1054

题解:

  将每一种状态十六位压成二进制,然后bfs。。不解释。。

  p.s.注意特判初始==目标;

代码:

#include<bits/stdc++.h>using namespace std;const int mx[5]={0,1,-1,0,0},my[5]={0,0,0,-1,1};
int g[6][6],last,ans,vis[1000010];
char ch[6][6];struct node{int w,dep;
};queue<node>q;void back(int x){for(int i=4;i;i--)for(int j=4;j;j--)g[i][j]=x&1,x>>=1;
}int to(){int sum=0;for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)sum<<=1,sum+=g[i][j];return sum;
}void bfs(){while(!q.empty()){node h=q.front();q.pop();back(h.w);for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)if(g[i][j])for(int k=1;k<=4;k++){int xx=i+mx[k],yy=j+my[k];if(xx>0&&xx<5&&yy>0&&yy<5&&!g[xx][yy]){g[xx][yy]^=1,g[i][j]^=1;int tt=to();if(tt==last){ans=h.dep+1;return ;    }if(!vis[tt])q.push((node){tt,h.dep+1}),vis[tt]=1;g[xx][yy]^=1,g[i][j]^=1;                }}}
}int main(){for(int i=1;i<=4;i++)scanf("%s",ch[i]+1);for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)g[i][j]=ch[i][j]-'0';int tt=to();q.push((node){tt,0});vis[tt]=1;for(int i=1;i<=4;i++)scanf("%s",ch[i]+1);for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)g[i][j]=ch[i][j]-'0';last=to();if(last==tt){printf("0");return 0;    }bfs();printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/tang666/p/8744367.html

BZOJ 1054: [HAOI2008]移动玩具(bfs)相关推荐

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

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

  2. BZOJ 1055 [HAOI2008]玩具取名

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1119  Solved: 653 [Submit][Sta ...

  3. bzoj 1055: [HAOI2008]玩具取名(区间DP)

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2010  Solved: 1177 [Submit][St ...

  4. [BZOJ]1055: [HAOI2008]玩具取名

    Time Limit: 10 Sec  Memory Limit: 162 MB Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字 ...

  5. [bzoj1054][HAOI2008]移动玩具

    题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具 ...

  6. bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)

    1056: [HAOI2008]排名系统 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1854  Solved: 502 [Submit][Sta ...

  7. BZOJ 1042 [HAOI2008]硬币购物

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1446  Solved: 845 [Submit][Sta ...

  8. [HAOI2008]移动玩具

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

  9. bzoj 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2838  Solved: 1238 [Submit][S ...

最新文章

  1. centos修改oracle字符集
  2. MySQL8小时连接超时断开问题
  3. Verilog中的加法器(半加器,全加器,串行、超前进位加法器)
  4. python修复不了_修复 Python version 2.6 required, which was not found in the registry.
  5. pos加盟申请php_ThinkPHP万能表单程序源码 报名预约加盟申请调查表单程序源码
  6. 掌握这些Android开发热门前沿知识,跳槽薪资翻倍
  7. (软件工程复习核心重点)第一章软件工程概论-第四节:软件过程及相关模型
  8. 035——VUE中表单控件处理之使用vue控制select操作文字栏目列表
  9. JavaSE--异常信息打印
  10. 浅谈双线程dp (nyoj61 nyoj712)经典【传字条】和【探 寻 宝 藏】
  11. 简述ip地址的abc类如何划分_IP 地址分类及 ABCDE 五类是如何划分的
  12. ADO的七个对象详情解读
  13. 假设今天是2015年3月1号星期日,计算13个月零6天后是星期几?距离现在多少秒?
  14. PHP网页设计实现增删改查,包含报告实训内容
  15. Android动画之帧动画
  16. 2022.5.4.学习笔记数据类型
  17. w10计算机运行特别卡,win10很卡?教你4大技巧,降低CPU占用,旧电脑运行如飞
  18. 约坡慈尉仪特诨谙凹毖仍怯滋傥丛
  19. 360网站卫士 PHP-DOS攻击脚本专杀工具使用笔记
  20. Linux timeout 命令

热门文章

  1. 2748: [HAOI2012]音量调节
  2. Web后端学习笔记 Flask(1)基础知识
  3. c 本地html解析,使用selenium解析本地HTML文件方法
  4. android build获取ext,顶级build.gradle文件中的ext属性
  5. python连接sqlserver 多条sql语句后提交_利用python操作sqllite
  6. Python笔记:0
  7. python调用jar包的模块_使用 Python 的 JPype 模块调用 Jar 包
  8. 强化学习:2 马尔科夫决策过程
  9. Staked 回应节点遭到 slash 惩罚:由技术性问题导致,将全额赔偿受影响客户
  10. 海德薇格:我很期待看到 数字货币将如何改变人民币支付市场