题目链接: http://codeforces.com/problemset/problem/445/A

题解:

这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折。

先是用递推,结果发现递推下去可能会出现非法的情况(一开始还不知道,坚定不移地认为这种方法是对的。Now,what can I say?)

然后用回溯,就是类似在递推的方式下,如果遇到非法就退回上一步,有了改错的机会。结果,超时。也是,这种方法太暴力了。

最后想到:一个格子的与之相邻的格子(如果能涂色),其颜色必定不同。那么就可以先对一个格子涂上颜色,然后向四个方向扩散,这四个格子又继续扩散,直到不能扩散,访问过得要做个标记。

然而,师兄教的方法,让我不知该说些什么。

首先打个表格。

BWBWBW

WBWBWB

BWBWBW

WBWBWB

哪个位置是空的,就输出这个字符。抓住本质下手, 一针见血啊!

为什么我想不到,然后想的都是那么复杂的方法,还不一定正确。好好学习,好好学习。

下面是dfs的代码:

 #include<iostream>//F - DZY Loves Chessboard CodeForces - 445A  dfs
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std; char a[][];
int vis[][];
int n,m; void dfs(int x, int y,int B)
{
if(x>n || x<) return;//判断是否越界或已经访问过
if(y>m || y<) return;
if(vis[x][y] || a[x][y]=='-') return; vis[x][y] = ;//涂色
if(B) a[x][y] = 'B';
else a[x][y] = 'W'; dfs(x,y+,!B);//四个方向都填相反的颜色
dfs(x,y-,!B);
dfs(x+,y,!B);
dfs(x-,y,!B);
} int main()
{
scanf("%d%d",&n,&m);
memset(a,,sizeof(a));
for(int i = ; i<=n; i++)
scanf("%s",a[i]+); //由于某些格子可能是封闭的,所以要逐个格子去判断是否还需要填色
for(int i = ; i<=n; i++)
for(int j = ; j<=m; j++)
{
if(a[i][j]=='-')
vis[i][j] = ; else if(!vis[i][j])
{
dfs(i,j,);
}
} for(int i = ; i<=n; i++)
puts(a[i]+);
return ;
}

Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs的更多相关文章

  1. [题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard

    链接:http://codeforces.com/contest/445/problem/A 描述:一个n*m的棋盘,有一些格子不能放棋子.现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同.输出 ...

  2. Codeforces Round #254 (Div. 2) A DZY Loves Chessboard

    先生成nXm的BW棋盘 BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB 类似上面交替变换 然后将输入为’-’的地方替换成‘-’即可 #include <iostream& ...

  3. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 线段树

    题目链接: http://codeforces.com/problemset/problem/444/C J. DZY Loves Colors time limit per test:2 secon ...

  4. Codeforces Round #254 (Div. 1) D - DZY Loves Strings

    D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...

  5. Codeforces Round #254 (Div. 1) D. DZY Loves Strings hash 暴力

    D. DZY Loves Strings 题目连接: http://codeforces.com/contest/444/problem/D Description DZY loves strings ...

  6. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块

    C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...

  7. Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题

    A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...

  8. Codeforces Round #254 (Div. 2)B. DZY Loves Chemistry

    B. DZY Loves Chemistry time limit per test 1 second memory limit per test 256 megabytes input standa ...

  9. Codeforces Round #254 (Div. 1) C DZY Loves Colors

    http://codeforces.com/contest/444/problem/C 题意:给出一个数组,初始时每个值从1--n分别是1--n.  然后两种操作. 1:操作 a.b内的数字是a,b内 ...

随机推荐

  1. PyTorch学习笔记之Tensors 2

    Tensors的一些应用 ''' Tensors和numpy中的ndarrays较为相似, 因此Tensor也能够使用GPU来加速运算 ''' # from _future_ import print ...

  2. Java获取当前时间戳/时间戳转换

    时间戳精度有两个概念:1是精确到秒,2是精确到毫秒. 要操作时间戳和时间戳转换为时间一般对应的对象就是Date,而Date各种转换离不开SimpleDateFormat: 如果是要获取时间指定的年月日 ...

  3. [转] 常用SQL查询语句

    sunada  的原文地址 常用SQL查询语句 一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指 ...

  4. Android自定义Dialog效果

    上面是效果图. 使用方法: NiftyDialogBuilder dialogBuilder=NiftyDialogBuilder.getInstance(this); dialogBuilder . ...

  5. iOS -- 开源项目和库

    TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 ...

  6. Neural Networks for Machine Learning by Geoffrey Hinton (1~2)

    机器学习能良好解决的问题 识别模式 识别异常 预測 大脑工作模式 人类有个神经元,每一个包括个权重,带宽要远好于工作站. 神经元的不同类型 Linear (线性)神经元  Binary thresho ...

  7. Spin.js-CSS动画进度载入器

    spin.js是一款很easy的CSS载入器,他是一款使用了VML(Vector Makeup Language)的CSS动画效果. spin.js的特性 他有着很强大的适应性.有着下面几个特性: 1 ...

  8. Eclipse出现&quot;Running Android Lint has encountered a problem&quot;解决方式

    近期打开Eclipse的时候,总是发生这种一个错误:"Running Android Lint has encountered a problem".截图例如以下: . 可是Ecl ...

  9. android页面间传递对象

    android传递对象有两种方式: 一种是Serializable和Parcelable 对于第一种方式: import java.io.Serializable; public class Shop ...

  10. HDMI

    HDMI,全称为(High Definition Multimedia Interface)高清多媒体接口,主要用于传输高清音视频信号. 现在是HDMI2.0.新一代的HDMI2.0较上一代最大的提升 ...