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