翻转棋,注意是翻转周围四个的,不是整行列的  汗-_-!

哥的代码风还是不错的

二进制储存状态

Sample Input

bwwb
bbwb
bwwb
bwww

Sample Output

4
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int n,m,t;
int vis[];
struct node
{
int s,t;
}st;
int flip(int s,int i) //当前的状态,翻第几个棋子
{
int x=i/;
int y=i%;
s^=(<<i); //翻选中的棋子
if(x>) s^=(<<(i-));//翻转上面的
if(y>) s^=(<<(i-));//翻转左边的
if(x<) s^=(<<(i+));//翻转下面的
if(y<) s^=(<<(i+));//翻转右边的
return s;
}
void bfs()
{
node now,next;
vis[st.s]=;
queue<node> q;
q.push(st);
while(!q.empty())
{
now=q.front();
q.pop();
//printf("%d %d\n",now.s,now.t);
if(now.s==||now.s==) //全黑or全白
{
printf("%d\n",now.t);
return;
}
for(int i=;i<;i++)
{
next.s=flip(now.s,i);
next.t=now.t+;
if(!vis[next.s])
{
vis[next.s]=;
q.push(next);
}
}
}
printf("Impossible\n");
return;
}
int main()
{
int i,j,k;
//freopen("1.in","r",stdin);
char s[];
st.s=;
for(i=;i<;i++)
{
scanf("%s",s);
for(j=;j<;j++)
if(s[j]=='b') st.s+=<<(i*+j);
}
memset(vis,,sizeof(vis));
st.t=;
bfs();
return ;
}

最新文章

  1. Java——标签组件:JLabel
  2. linux sed命令参数及用法详解
  3. 转: JSP中include指令和include动作的区别
  4. javascript面向对象知识点
  5. JVM——类的加载过程
  6. Android Studio 导入第三方jar包
  7. 【POJ1284】Primitive Roots 欧拉函数
  8. Linux指令--head,tail
  9. SQL Server 创建索引
  10. Posts Tagged ‘This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register问题的解决办法
  11. [Git] 解决 insufficient permission for adding an object to repository database
  12. Python全栈开发:list 、tuple以及dict的总结
  13. 20155223 2016-2017-2 《Java程序设计》第7周学习总结
  14. 函数中的 arguments 对象
  15. mysql5.5和5.6版本间的坑
  16. 第六篇:Spark SQL Catalyst源码分析之Physical Plan
  17. jquery报表插件收藏 MARK
  18. 每日笔记---使用@ConfigurationProperties读取yml配置
  19. 通过swagger下载的文件乱码解决方法,求解
  20. C# base64获取图片后缀

热门文章

  1. xcode6.3插件失效
  2. serialization机制
  3. HttpResponse对象
  4. Swift学习笔记
  5. [转] Android开发者必备的42个链接
  6. 为dedecms文章列表页标题增加序号,第二页开始才显示第x页
  7. Asteroids(匈牙利算法入门)
  8. UITapGestureRecognizer
  9. ruby实时查看日志
  10. Linux / UNIX create soft link with ln command