这个题就是用枚举举遍所有情况,然后一个一个深搜看看是不是符合条件,符合条件直接退出,不符合则继续,

由于表格只有16个所以可以得知最多的步数只能是16,所以可以根据步数从0到16依次枚举,

第一个符合条件的就是最小的步数,为了容易深搜,可以设定顺序为一行一行深搜,当一行搜完时从下一行开头搜,

代码和测试数据如下:

#include<stdio.h>
int flag;
int step;
int map[][]; void turn(int i, int j) //转换
{
map[i][j] = !(map[i][j]);
if (i > )
{
map[i-][j] = !(map[i-][j]);
}
if (i < )
{
map[i + ][j] = !(map[i + ][j]);
}
if (j > )
{
map[i][j-] = !(map[i][j-]);
}
if (j < )
{
map[i][j + ] = !(map[i][j + ]);
}
} int range()//判定表格是否全部一样
{
int i, j;
for (i = ; i < ; i++)
{
for (j = ; j < ; j++)
{
if (map[i][j] != map[][])
{
return ;
}
}
}
return ;
} int DFS(int i, int j, int dp)//深搜(dp<=step)
{
//对第dp次的转换作判断
if (dp == step)
{
flag = range();
return ;
}
if (flag || i == )
{
return ;
} //没有以上两种可以直接退出函数的情况,
//说明此时的dp<step,就进行第dp+1次的转换
turn(i, j); //对第dp+1次的转换进行判断
if (j < )
{
//判断的是第dp+1次时转换的turn(i,j),
//如果判断成功,直接退出函数。
//如果判断失败,要继续进行下一列(即j+1)的递归转换和判断
//j+1不影响对第dp+1次转换的turn(i,j)的判断
//因为在DFS()函数里,判断turn(i,j)的步骤总在turn(i,j+1)前面
DFS(i, j+, dp + );
}
else
{
//判断的是第dp+1次时转换的turn(i,j),
//如果判断成功,直接退出函数。
//如果判断失败,要继续进行下一行(即i+1)的递归转换和判断
//i+1不影响对第dp+1次转换的turn(i,j)的判断
//因为在DFS()函数里,判断turn(i,j)的步骤总在turn(i+1,j)前面
DFS(i + , , dp+);
} turn(i, j); //不符合条件,重新转换回来 //第dp次时,表格恢复初始状态
if (j < )
{
DFS(i, j + , dp ); //进行对下一列进行第dp次的转换()
}
else
{
DFS(i + , , dp); //进行对下一行进行第dp次的转换
} return ; } int main()
{
char a;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
scanf("%c", &a);
if (a == 'b')
{
map[i][j] = ;
}
else
{
map[i][j] = ;
}
}
getchar(); //不要遗忘
} for (step = ; step <= ; step++)
{
flag = ;
DFS(, , );
if (flag)
break;
}
if (flag)
{
printf("%d\n", step);
}
else
{
printf("Impossible\n");
} return ; }

Poj1753 翻转棋子的更多相关文章

  1. POJ1753——Flip Game

    Flip Game Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on ...

  2. POJ 1753 Flip Game (状态压缩 bfs+位运算)

    Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...

  3. Flip Game(枚举)Poj

     Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31329   Accepted: 13622 De ...

  4. POJ 1753 Flip Game(状态压缩+BFS)

    题目网址:http://poj.org/problem?id=1753 题目: Flip Game Description Flip game is played on a rectangular 4 ...

  5. 1753 -- Flip Game

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 48663   Accepted: 20724 Descr ...

  6. POJ 1753 Flip Game (状压+暴力)

    题目链接:http://poj.org/problem?id=1753 题意: 给你一个4*4的棋盘,上面有两种颜色的棋子(一种黑色,一种白色),你一次可以选择一个棋子翻转它(黑色变成白色,同理反之) ...

  7. python3+tkinter实现的黑白棋,代码完整 100%能运行

    今天分享给大家的是采用Python3+tkinter制作而成的小项目--黑白棋 tkinter是Python内置的图形化模块,简单易用,一般的小型UI程序可以快速用它实现,具体的tkinter相关知识 ...

  8. 在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  9. NC235250 牛可乐的翻转游戏

    NC235250 牛可乐的翻转游戏 题目 题目描述 牛可乐发明了一种新型的翻转游戏! 在一个有 \(n\) 行 \(m\) 列的棋盘上,每个格子摆放有一枚棋子,每一枚棋子的颜色要么是黑色,要么是白色. ...

随机推荐

  1. Java5-7作业总结(第八次作业)19201421-吴志越

    前言:关于此次三次作业,相比于前3次难度着实高了一个档次,第五次作业,虽然对于工具类没有很高.但是第一题的复杂程度很高,对于正则表达式有很高的要求,需要使用很多正则表达式的方法,而且不能有一处错误,对 ...

  2. Codeforces 1291 Round #616 (Div. 2) C. Mind Control(超级详细)

    C. Mind Control You and your n−1 friends have found an array of integers a1,a2,-,an. You have decide ...

  3. SQLite使用(二)

    sqlite3_exec虽然好用,但是一般不推荐直接使用. 常用的一组操作是: 关于sqlite3_exec和sqlite3_prepare_v2的使用场景,建议如下: 一个小DEMO: #inclu ...

  4. CODING 敏捷实战系列课第二讲:Scrum 敏捷项目管理核心要素之 3355

    Scrum 是敏捷开发流派中最著名和最落地的一支,全球 70% 以上公司的敏捷转型都是以 Scrum 起步.CODING 特邀敏捷顾问.CST & CTC 认证敏捷教练申健老师将在本课程< ...

  5. P2432 zxbsmk爱查错

    描述:https://www.luogu.com.cn/problem/P2432 给你一个主串以及若干个子串,求最少需要删除几个字母,使得主串能由一些子串组成. dp [ i ] 表示前 i 个字符 ...

  6. CSS页面定制代码+动漫人物设计

    右下角的小人物(我蛮喜欢的) 把下面这段代码粘贴到设置里页脚代码处 在第六行的model左右的名字可选,我这个是叫z16 然后这里有别人的一篇博客有其他名字https://blog.csdn.net/ ...

  7. 面试官:你说你懂动态代理,那你知道为什么JDK中的代理类都要继承Proxy吗?

    之前我已经写过了关于动态代理的两篇文章,本来以为这块应该没啥问题,没想到今天又被难住了- 太难了!!! 之前文章的链接: 动态代理学习(一)自己动手模拟JDK动态代理. 动态代理学习(二)JDK动态代 ...

  8. 【FPGA篇章四】FPGA状态机:三段式以及书写方法

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 状态机是fpga设计中极其重要的一种技巧,状态机通过不同的状态迁移来完成特定的逻辑操作,掌握状态机的写法可以使fpga的开发事半功倍. 状态 ...

  9. Qt源码解析之-从PIMPL机制到d指针

    一.PIMPL机制 PIMPL ,即Private Implementation,作用是,实现 私有化,力图使得头文件对改变不透明,以达到解耦的目的 pimpl 用法背后的思想是把客户与所有关于类的私 ...

  10. 高性能mysql第三版读书笔记3

    innodb以前不支持高并发,在搞病房下就是悲剧,全部卡在mutex(缓冲池mutex)上,现在通过线程调度器控制线程怎么进入内核访问数据,参数为innodb_thread_concurrency,它 ...