//poj 3185
2 //利用bit,通过位运算切换状态 ,然后BFS一下,轻易水过。
3 //说完好像很简单。。。是的,简单是简单,弱第一次以这种位运算姿势过题,太劲。膜思路 ORZ...
4
5 #include<iostream>
6 #include<string.h>
7 #include<set>
8 #include<queue>
9 #include<sstream>
10 using namespace std;
11 12 bool vis[1<<21];
13 int step[1<<21];
14 int q[100000000];
15 int head,tail;
16 17 int BFS(int x)
18 {
19 memset(vis,0,sizeof(vis));
20 vis[x]=1;
21 head=0;tail=1;
22 q[head]=x;
23 step[x]=0;
24 while(head<tail)
25 {
26 int u=q[head];head++;
27 if(u==0)
28 return step[u];
29 for(int i=1;i<19;i++)
30 {
31 int r=u;
32 r^=(1<<i-1)|(1<<i)|(1<<i+1);
33 if(!vis[r])
34 {
35 vis[r]=1;
36 step[r]=step[u]+1;
37 if(r==0) return step[r];
38 q[tail++]=r;
39 }
40 }
41 int r;
42 r=u^(1<<0)^(1<<1);
43 if(!vis[r])
44 {
45 vis[r]=1;
46 step[r]=step[u]+1;
47 if(r==0) return step[r];
48 q[tail++]=r;
49 }
50 r=u^(1<<18)^(1<<19);
51 if(!vis[r])
52 {
53 vis[r]=1;
54 step[r]=step[u]+1;
55 if(r==0) return step[r];
56 q[tail++]=r;
57 }
58 }
59 return -1;
60
61 }
62 63 int main()
64 {
65 int ans=0;
66 int x;
67 for(int i=0;i<20;i++)
68 {
69 scanf("%d",&x);
70 ans|=(x<<i);
71 }
72 printf("%d\n",BFS(ans));
73 return 0;
74 }

最新文章

  1. &lt;编程珠玑&gt;笔记 (一) 问题-算法-数据结构
  2. uboot 第三天学习
  3. osharp3 整合 dbcontextscope 文章2 将dbcontext的创建收回到ioc管理
  4. C#窗体 自定义控件
  5. windows 80端口被占用
  6. mysql概要(五)union
  7. sql2008安装时提示重启计算机失败解决方法
  8. Eclipse中设置作者日期等信息
  9. django中的事务管理
  10. JavaScript 单例模式实现
  11. 怎样学习java?
  12. leetcode:pascal&amp;#39;s_triangle_II
  13. 谷歌Volley网络框架讲解——BasicNetwork类
  14. Docker容器跨主机通信
  15. tomcat是什么?Tomcat 下载、安装、配置图文教程
  16. react native 0.55.4 rctsrwebsocket会崩溃的问题解决 直接原文覆盖
  17. Atcoder Beginner Contest 121 D - XOR World(区间异或和)
  18. python中的 sql语句用法
  19. Spring中 @Autowired标签与 @Resource标签 的区别
  20. SCU 4439 Vertex Cover(二分图最小覆盖点)题解

热门文章

  1. 为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?
  2. 三联动 支持ie6,ie7 省,市,区
  3. Effective C++ 条款二 用编译器替换预编译器
  4. [java][db]JAVA分布式事务原理及应用
  5. 横跨十年CPU架构回顾
  6. ViewGroup如何分发事件
  7. Android的onMeasure方法
  8. 【ACdream】1157 Segments cdq分治
  9. this that 时间戳转日期 小程序 列表 与 加载
  10. 端口扫描 开启 防火墙 iptables SELinux