题目链接:Fliptile

题目大意

有一个01矩阵,每一次翻转(0->1或者1->0)一个元素,就会把与他相邻的四个元素也一起翻转。求翻转哪些元素能用最少的步骤,把矩阵变成0矩阵。

思路

假设确定了第一行的状态,那么第二行需要翻转的所有元素都能确定(上一行如果是1就必须翻转)。因此对于所有第一排的情况,往下递推需要翻转的元素,最后判断最后一行如果全为0则满足条件,记录步骤最少的情况。

题解

 #include <iostream>
#include <cstring> using namespace std; int n, m, mmin=0x3f3f3f3f;
int map[][],tmp[][],ans[][]; bool judge(){
for(int i = ; i < m; i++)
{
int time = tmp[n-][i] + tmp[n-][i];
if(i != )
{
time += tmp[n-][i-];
}
if(i != m-)
{
time += tmp[n-][i+];
}
time %= ;
if(map[n-][i] ^ time){
return false;
}
}
return true;
} void dfs(int k, int num)
{
if(num > mmin) return;
if(k > n-) //最后一行遍历 结束,判断最后一行是否全0
{
if(judge() && num < mmin)
{
memcpy(ans, tmp, sizeof(tmp));
mmin = num;
}
return;
}
int flag = ; for(int i = ; i < m; i++)
{
int time = ;
time = tmp[k-][i] + tmp[k-][i];
if(i != )
{
time += tmp[k-][i-];
}
if(i != m-)
{
time += tmp[k-][i+];
}
if((map[k-][i]+time)&)
{
tmp[k][i] = ;
flag++;
}
else
{
tmp[k][i] = ;
}
}
dfs(k+, num+flag); //搜索下一行
} void todfs(int k, int num)
{
if(k > m - ){ //遍历完第一行
dfs(, num); //从第二行开始
return;
}
tmp[][k] = ;
todfs(k+, num);
tmp[][k] = ;
todfs(k+, num+);
} int main(int argc, char const *argv[])
{
#ifdef debug
freopen("test.txt","r",stdin);
#endif
cin >> n >> m;
for(int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
{
cin >> map[i][j];
}
}
todfs(, );
if(mmin == 0x3f3f3f3f)
{
cout << "IMPOSSIBLE" << endl;
}
else
{
for(int i = ; i < n; i++)
{
for(int j = ; j < m; j++)
{
cout << ans[i][j] << " ";
}
cout << endl;
}
}
return ;
}

其实这个题用的数组下标最好是从1开始,这样不用把列号是0的元素拿出来单独计算了。

Fliptile POJ-3279 DFS的更多相关文章

  1. Enum:Fliptile(POJ 3279)

    Fliptile 题目大意:农夫想要测牛的智商,于是他把牛带到一个黑白格子的地,专门来踩格子看他们能不能把格子踩称全白 这一题其实就是一个枚举题,只是我们只用枚举第一行就可以了,因为这一题有点像开关一 ...

  2. Fliptile POJ - 3279 (开关问题)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16483   Accepted: 6017 Descrip ...

  3. Fliptile(POJ 3279)

    原题如下: Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16494   Accepted: 6025 D ...

  4. kuangbin专题 专题一 简单搜索 Fliptile POJ - 3279

    题目链接:https://vjudge.net/problem/POJ-3279 题意:格子有两面,1表示黑色格子,0表示白色格子,奶牛每次可以踩一个格子,踩到的格子和它周围的上下左右格子都会翻面,也 ...

  5. POJ 3279(Fliptile)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...

  6. POJ 3279 Fliptile(翻格子)

    POJ 3279 Fliptile(翻格子) Time Limit: 2000MS    Memory Limit: 65536K Description - 题目描述 Farmer John kno ...

  7. POJ.3279 Fliptile (搜索+二进制枚举+开关问题)

    POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...

  8. 状态压缩+枚举 POJ 3279 Fliptile

    题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...

  9. 【枚举】POJ 3279

    直达–>POJ 3279 Fliptile 题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变 ...

  10. POJ 3279 Fliptile(DFS+反转)

    题目链接:http://poj.org/problem?id=3279 题目大意:有一个n*m的格子,每个格子都有黑白两面(0表示白色,1表示黑色).我们需要把所有的格子都反转成黑色,每反转一个格子, ...

随机推荐

  1. 林大妈的CSS知识清单(一)添加样式

    回顾CSS选择符,学习接入样式的更多方式. 一.选择符 1. 种类 ① 类型选择符:直接的HTML标签名,例如: body.p.div 等: ② 后代选择符:空格,例如: div p 选择div中的所 ...

  2. JSON格式提取相同属性的某个值

    [ {UID:"222",value:"111"}, {UID:"222",value:"103"}, {UID:&qu ...

  3. python 26 反射

    目录 1. 类的反射 1.1 实例对象 1.2 类 1.3 其他模块 -- 其他.py文件 1.4 本模块 -- 当前.py文件 2. 函数与方法的区别 2.1区别的方法: 2.2 总结 3. 特殊的 ...

  4. 2013-2014 ACM-ICPC Pacific Northwest Regional Contest D.Delta Quadrant

    题意略. 思路: 由于这是一颗无根树,我们可以贪心地来删去边. 详见代码: #include<bits/stdc++.h> using namespace std; typedef lon ...

  5. Codeforces 1009D

    题意略. 思路: 可知对于一个拥有n个点的图来说,它至少需要有n - 1条边来维持连通性,而且数字1恰好与后面的n - 1个数字互质: 至于n个点的图可以产生合法的互质边的个数的上限,我们可以通过莫比 ...

  6. 2019icpc南京网络赛_F_Greedy Sequence

    题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...

  7. 基于Taro与Typescript开发的网易云音乐小程序

    基于Taro与网易云音乐api开发,技术栈主要是:typescript+taro+taro-ui+redux,目前主要是着重小程序端的展示,主要也是借此项目强化下上述几个技术栈的使用,通过这个项目也可 ...

  8. [Error]Win8安装程序出现2502、2503错误解决方法

    转载自:http://jingyan.baidu.com/article/a501d80cec07daec630f5e18.html 在Win8中,在安装msi安装包的时候常常会出现代码为2502.2 ...

  9. Codeforces Round #480 (Div. 2)980C Posterized+分组类贪心

    传送门:http://codeforces.com/contest/980/problem/C 参考 题意:给定n个数字,每个数在0~256间,现在给至多连续k的数分为一组,给出字典序最小的答案. 思 ...

  10. POJ-2387 Til the Cows Come Home ( 最短路 )

    题目链接: http://poj.org/problem?id=2387 Description Bessie is out in the field and wants to get back to ...