noi1816 画家问题(技巧搜索Dfs)
/*
Problem 画家问题
假设一个ans数组存的是对每一个点的操作 0表示不图 1表示图
那么 对于原图 g 操作第三行时对第一行没有影响 同样往下类似的
所以 假设我们知道了ans的第一行就是最后答案的第一行 那么对于ans的第二行 就必须是的第一行全变成黄色
以此类推 最后检验第n行 是不是全部黄色就好了
所以只需要枚举第一行的所有情况 共2的n次方种情况
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define inff 0x7fffffff
using namespace std;
int n,ans[][],g[][],tmp[][],anss,minn=inff,tot;
char s;
void Printf()//计数 染了几个
{
anss=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(ans[i][j]==)anss++;
minn=min(minn,anss);
}
void Pai()//根据ans的第一行 逐行染色
{
int i,j,f=;
memset(tmp,,sizeof(tmp));
for(i=;i<=n;i++)
for(j=;j<=n;j++)
tmp[i][j]=g[i][j];
for(i=;i<=n;i++)
{
if(ans[][i]==)
{
tmp[][i]=!tmp[][i];
tmp[][i+]=!tmp[][i+];
tmp[][i-]=!tmp[][i-];
tmp[][i]=!tmp[][i];
}
}
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(tmp[i-][j]==)
{
tmp[i-][j]=;
ans[i][j]=;
tmp[i][j]=!tmp[i][j];
tmp[i][j+]=!tmp[i][j+];
tmp[i][j-]=!tmp[i][j-];
tmp[i+][j]=!tmp[i+][j];
}
for(i=;i<=n;i++)//最后检验最后一行是不是恰好全为黄色
if(tmp[n][i]==)f=;
if(f==)Printf();
}
void Dfs(int t)//枚举ans的第一行的所有情况
{
if(t>n)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
ans[i][j]=;
Pai();
return;
}
ans[][t]=;Dfs(t+);
ans[][t]=;Dfs(t+);
}
int main()
{
int i,j;
cin>>n;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
cin>>s;
if(s=='w')g[i][j]=;
else g[i][j]=;
}
Dfs();
if(minn<0x7fffffff)cout<<minn;
else cout<<"inf";
}
noi1816 画家问题(技巧搜索Dfs)的更多相关文章
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
- 简单搜索dfs, 简单的修剪搜索
选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- POJ 2243 简单搜索 (DFS BFS A*)
题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 【算法入门】深度优先搜索(DFS)
深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...
随机推荐
- nutch 异常集锦
异常:Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp ...
- Matlab绘图系列之高级绘图
Matlab绘图系列之高级绘图 原帖地址: http://blog.163.com/enjoy_world/blog/static/115033832007865616218/ Matlab绘图 20 ...
- JSON和XML:不可同日而语
[编者按]本文作者 Yegor Bugayenko 是 Teamed.io 公司的联合创始人,在软件质量和工程管理方法领域有深入的研究.本文中,作者通过对比 JSON ,向大家更详细地阐述了 XML ...
- 应用安全技术趋势之 Top 5
而今,大多数应用都依赖于像入侵防护系统(Instrusion Prevention System)和 Web 应用防火墙(Web Application Firewall,以下全文简称 WAF)这样的 ...
- Java语言基础(二) Java关键字
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...
- Andoid 学习笔记 AppCompatEditText
android.support.v7.widget.AppCompatEditText 只有浮动标签 style中添加 <style name="txt_lab" paren ...
- poj2886
反素数范围不大,可以直接打表得然后就是模拟移动的过程我们可以用线段树优化,具体明天再说吧 ..] ,,,,,,,,,,,,,, ,,, ...
- maven配置默认jdk版本
在maven的默认配置中,对于jdk的配置是1.4版本,那么创建/导入maven工程过程中,工程中未指定jdk版本. 对工程进行maven的update,就会出现工程依赖的JRE System Lib ...
- 制作手机浏览器显示格式的HTML页面
最近要推出手机支持访问的HTML页面效果,而这在制作手机页面的过程中状况连连. 主要一下就我制作的工程中所遇的问题说明一下: 1. 改掉HTML页面声明:(以往大部分页面都是HTML4.0的声明) 还 ...
- google font和@font-face
会使用google字体 网址: http://www.google.com/fonts/ 选择字体, quick use 引用css: <link href='http://fonts.goog ...