Poj1753 翻转棋子
这个题就是用枚举举遍所有情况,然后一个一个深搜看看是不是符合条件,符合条件直接退出,不符合则继续,
由于表格只有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 翻转棋子的更多相关文章
- POJ1753——Flip Game
Flip Game Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on ...
- 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 ...
- Flip Game(枚举)Poj
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31329 Accepted: 13622 De ...
- POJ 1753 Flip Game(状态压缩+BFS)
题目网址:http://poj.org/problem?id=1753 题目: Flip Game Description Flip game is played on a rectangular 4 ...
- 1753 -- Flip Game
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 48663 Accepted: 20724 Descr ...
- POJ 1753 Flip Game (状压+暴力)
题目链接:http://poj.org/problem?id=1753 题意: 给你一个4*4的棋盘,上面有两种颜色的棋子(一种黑色,一种白色),你一次可以选择一个棋子翻转它(黑色变成白色,同理反之) ...
- python3+tkinter实现的黑白棋,代码完整 100%能运行
今天分享给大家的是采用Python3+tkinter制作而成的小项目--黑白棋 tkinter是Python内置的图形化模块,简单易用,一般的小型UI程序可以快速用它实现,具体的tkinter相关知识 ...
- 在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- NC235250 牛可乐的翻转游戏
NC235250 牛可乐的翻转游戏 题目 题目描述 牛可乐发明了一种新型的翻转游戏! 在一个有 \(n\) 行 \(m\) 列的棋盘上,每个格子摆放有一枚棋子,每一枚棋子的颜色要么是黑色,要么是白色. ...
随机推荐
- css之颜色表示法
css之颜色表示法 十六进制颜色 所有浏览器都支持十六进制颜色值. 十六进制颜色是这样规定的:#RRGGBB,其中的 RR(红色).GG(绿色).BB(蓝色)十六进制整数规定了颜色的成分.所有值必须介 ...
- 【JAVA基础】06 面向对象
1. 面向对象思想概述 面向过程思想概述 第一步 第二步 面向对象思想概述 找对象(第一步,第二步) 举例 买煎饼果子 洗衣服 面向对象思想特点 是一种更符合我们思想习惯的思想 可以将复杂的事情简单化 ...
- SQL语句学习(一)
这篇文章用来记录再学习SQL语句的过程. 首先,我们从简单的创建表开始.创建表的语法是CREATE TABLE 表名(列1的名字 列1的属性,列2的名字 列2的属性...); 如果希望将某一列作为 ...
- 关于利用注射点判断数据库web是否分离
得到客户端主机名:select host_name();得到服务端主机名: select @@servername; 本文转hackfreer51CTO博客,原文链接:http://blog.51ct ...
- python(安装)
1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python3(建议自定义安装路径) 3.配置环境变量 [右键计算机]-->[属 ...
- CentOS-6.5操作系统安装
1.创建Linux虚拟机(如图所示) 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 ...
- html之表单元素form
表单元素form \(都是嵌套input标签来实现,其中type属性选择不同则不同\) \(text:文本内容(输入内容可见)\) \(password:密码(输入内容不可见)\) \(submit: ...
- G - Pictures with Kittens (easy version) dp
https://codeforces.com/problemset/problem/1077/F1 这个其实是一个比较简单的dp了 题目大意: 给你n个数,让你从n个数里选出x个数,并且每隔k个至少选 ...
- 自定义比较器(IComparer接口的实现)
class FileNameSort : IComparer { [System.Runtime.InteropServices.DllImport("Shlwapi.dll", ...
- GroupJoin()各参数的意义及用法
EF Core中GroupJoin的注释比较复杂: public static IEnumerable<TResult> GroupJoin<TOuter, TInner, TKey ...