老天待我不薄,又来这么一题POJ1753
还是位运算+BFS系列题;
现在这种真是无比喜欢,今天搞了一上午这题。。。因为状态的改变写错了…T.T
#include<cstdio>
#include<queue>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int head,tail;
bool vis[1<<17];
int step[1<<17];
int q[1<<17];
int judge(int x)
{
if(x>=0&&x<=15)
return 1;
return 0;
}
int change[16] = //16种状态转换,对应4*4的翻子位置
{
51200,58368,29184,12544,
35968,20032,10016,4880,
2248,1252,626,305,
140,78,39,19
};
int bfs(int x)
{
memset(vis,0,sizeof(vis));
memset(step,0,sizeof(step));
head=0;
tail=1;
step[x]=0;
vis[x]=1;
q[head]=x;
while(head<tail)
{
int v=q[head];
head++;
int ne;
if(v==0||v==(65535))
{
return step[v];
}
//这波状态真是写到吐血,一开始没怎么注意...
for(int i=0; i<16; i++)
{
ne=v;
int u=0;
if(i==0)
{
u=(1<<0)|(1<<1)|(1<<4);
}
else if(i==2||i==1)
{
int a,b,c;
a=i-1;
b=i+1;
c=i+4;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==3)
{
u=(1<<2)|(1<<7);
u^=(1<<i);
}
else if(i==4||i==8)
{
int a,b,c;
a=i-4;
b=i+1;
c=i+4;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==5||i==6||i==9||i==10)
{
int a,b,c,d;
a=i-1;
b=i+1;
c=i+4;
d=i-4;
u=(1<<a)|(1<<b)|(1<<c)|(1<<d);
u^=(1<<i);
}
else if(i==7||i==11)
{
int a,b,c;
a=i-4;
b=i-1;
c=i+4;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==12)
{
u=(1<<8)|(1<<13);
u^=(1<<i);
}
else if(i==13||i==14)
{
int a,b,c;
a=i-4;
b=i+1;
c=i-1;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==15)
{
u=(1<<14)|(1<<11);
u^=(1<<i);
}
ne^=u;
//ne=v^change[i]; //说多了都是泪
if(!vis[ne])
{
vis[ne]=1;
step[ne]=step[v]+1;
if(ne==0||ne==(65535))
{
return step[ne];
}
q[tail++]=ne;
}
}
}
return -1;
}
int main()
{
int i,j;
char s[5][5];
while(~scanf("%s",s[0]))
{
for(i=1;i<4;i++)
scanf("%s",s[i]);
int ans=0;
for(i = 0 ; i < 4 ; ++i)
{
for(j = 0 ; j < 4 ; ++j)
{
if(s[i][j]=='b')
ans|=(1<<(i*4+j));
}
}
int qq=bfs(ans);
if(qq!=-1)
printf("%d\n",qq);
else
printf("Impossible\n");
}
}
/*
bwwb
bbwb
bwwb
bwww
*/
老天待我不薄,又来这么一题POJ1753的更多相关文章
- (转)一个大牛的acm历程(看着就要颤抖)
从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...
- 我的ACM参赛故事
从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...
- 第一次训练 密码:acmore
#include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...
- 使用JAVA编写电话薄程序,具备添加,查找,删除等功能
//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...
- 合并多个工作薄workbooks到一个工作薄workbook
微软示例教程 微软示例教程 Sub MergeAllWorkbooks() Dim SummarySheet As Worksheet Dim FolderPath As String Dim NRo ...
- wex5 实战 省市县三级联动与地址薄同步
无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2: 地址薄选项,利用inputSel ...
- DEDECMS 留言薄模块的使用方法
一.留言薄的安装 留言薄的安装过程和其他插件一样,首先我们进入后台模块管理列表,点击其对应的“安装”: 以上步骤,我们完成了留言薄插件的安装. 二.留言薄的卸载 留言薄的卸载,同样首先我们要进入模块管 ...
- 如何把一个excel工作薄中N个工作表复制到另一个工作薄中
一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...
- iOS:访问地址薄
地址簿的访问 介绍: 地址簿(Address Book)是一个共享的联系人信息数据库.任何iOS应用程序都可以使用.通过提供常用联系人信息,而不是让每一个应用程序管理独立的联系人列表,可改善用户体验. ...
随机推荐
- C#模拟登录Twitter 发送私信、艾特用户、回复评论
这次做成了MVC程序的接口 private static string UserName = "用户名"; private static string PassWord = &qu ...
- HashTable源代码剖析
<span style="font-size:14px;font-weight: normal;">public class Hashtable<K,V> ...
- CSS transform旋转问题
我们都知道css的transform可以让旋转多少角度:transform:rotate(90deg),但是设置后只能旋转一次,如何想让它一直旋转下去怎么办?一种是使用matrix属性获取当前tran ...
- Cocos2d-x Vector——vector iterators incompatible
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- Makefile:1: *** 多个目标匹配。 停止。
以下是我自己写的Makefile 文件: .SUFFIXES:.c .o CC = gcc SRCS = stat.c OBJS = $(SRCS:.c=.o) EXEC = test start:$ ...
- layer弹层
获得 layer 文件包后,解压并将 layer 整个文件夹(不要拆分结构) 存放到你项目的任意目录,使用时,只需引入 layer.js 即可. 注意:引入layer.js前必须先引入jquery1. ...
- 文件宝局域网传输/播放功能使用帮助(Mac电脑用户)
使用局域网账户密码登录,可以访问电脑上所有文件 使用游客无账户密码登录,只能访问电脑上指定共享文件夹的文件. 怎么设置共享文件夹请参考: 1.打开“共享”偏好设置(选取苹果菜单 >“系统偏好设置 ...
- iOS RAC常用方法
一直想写篇关于RAC的文章,一是分享二是做为笔记,由于项目忙先简单的贴一个自己当初学习的时候代码吧 一.RACCommand // RACCommand 的使用: 使用场景,监听按钮点击,网络请求 - ...
- Hadoop spark mongo复制集
启动hadoop cd /usr/local/hadoop/hadoop $hadoop namenode -format # 启动前格式化namenode $./sbin/start-all.sh ...
- CLI和CGI的区别
CGI :“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上.以CGI方式运行时,web s ...