还是位运算+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的更多相关文章

  1. (转)一个大牛的acm历程(看着就要颤抖)

    从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...

  2. 我的ACM参赛故事

    从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...

  3. 第一次训练 密码:acmore

    #include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...

  4. 使用JAVA编写电话薄程序,具备添加,查找,删除等功能

    //该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...

  5. 合并多个工作薄workbooks到一个工作薄workbook

    微软示例教程 微软示例教程 Sub MergeAllWorkbooks() Dim SummarySheet As Worksheet Dim FolderPath As String Dim NRo ...

  6. wex5 实战 省市县三级联动与地址薄同步

    无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2:  地址薄选项,利用inputSel ...

  7. DEDECMS 留言薄模块的使用方法

    一.留言薄的安装 留言薄的安装过程和其他插件一样,首先我们进入后台模块管理列表,点击其对应的“安装”: 以上步骤,我们完成了留言薄插件的安装. 二.留言薄的卸载 留言薄的卸载,同样首先我们要进入模块管 ...

  8. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...

  9. iOS:访问地址薄

    地址簿的访问 介绍: 地址簿(Address Book)是一个共享的联系人信息数据库.任何iOS应用程序都可以使用.通过提供常用联系人信息,而不是让每一个应用程序管理独立的联系人列表,可改善用户体验. ...

随机推荐

  1. SolidEdge如何快速绘制并完全定义槽型孔

    如果你点击A之后形成的圆弧不是你想要的   你试着换个方向,如下图所示   有时候只有一个方形可以形成你要的半圆  

  2. 消息列队 php 基于redis 实现

    说明 消息列队 基于PHP 实现. 之前 用python 的 flower 实现了 列队. 今天这里我们用的是 PHP 来实现: 在实际的业务环境中 PHP 用的多些: PHP 实现列队 最重要的是用 ...

  3. 如何快速上手一款新的嵌入式CPU芯片(记录CC2540开发经历)

    新换了工作,需要熟悉新公司的产品开发项目,更新博客就懈怠了,不过环境的不同,也让我对嵌入式开发有了更深刻的理解.在原公司我主要负责在STM32F207芯片平台上, 利用UCOS+LWIP进行嵌入式服务 ...

  4. location.href用法总结

    javascript中的location.href有很多种用法,主要如下. self.location.href=”/url” 当前页面打开URL页面 location.href=”/url” 当前页 ...

  5. 查询mysql字段名和字段注释

    select COLUMN_NAME,column_comment from INFORMATION_SCHEMA.Columns where table_name='表名' and table_sc ...

  6. 利用ctypes调用Fortran程序

    本来python下面调用fortran最傻瓜方便的办法就是f2py,但是若fortran和C混合编程的代码,分别指定gfortran和gcc为编译器,在windows下面f2py直接报错 那么ctyp ...

  7. javascript模块化编程:CommonJS和AMD规范

    AMD规范,异步模块定义.与CommonJS规范齐名并列. 作用都是利于JavaScript的模块化编程. 模块化编程的好处就是: 1.可重用 2.独立 3.能解决加载的依赖性问题 4.能解决重复加载 ...

  8. org.apache.flume.EventDeliveryException: NettyAvroRpcClient { host: hadoop1, port: 41414 }: Failed to send event

    org.apache.flume.EventDeliveryException: NettyAvroRpcClient { host: hadoop1, port: 41414 }: Failed t ...

  9. 如何解决Windows的端口占用问题?

    已知某应用在启动时会创建服务套接字,并将其绑定至端口8888,然而端口8888已被占用,如何解除占用? 以下为解决方案: 在cmd中运行netstat -ano|findstr 8888,其中的参数8 ...

  10. VC FTP服务器程序分析(四)

    下面是数据传输的重点-CDataSocket类,函数不多,都比较重要. 1.OnAccept  数据tcp服务器被连接的虚函数,由框架调用. void CDataSocket::OnAccept(in ...