Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs
题目链接: 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的更多相关文章
- [题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard
链接:http://codeforces.com/contest/445/problem/A 描述:一个n*m的棋盘,有一些格子不能放棋子.现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同.输出 ...
- Codeforces Round #254 (Div. 2) A DZY Loves Chessboard
先生成nXm的BW棋盘 BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB 类似上面交替变换 然后将输入为’-’的地方替换成‘-’即可 #include <iostream& ...
- 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 ...
- Codeforces Round #254 (Div. 1) D - DZY Loves Strings
D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...
- 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 ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块
C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...
- Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题
A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...
- 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 ...
- 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内 ...
随机推荐
- ios7.1后setting中没有开启相机服务应用程序相机预览黑屏问题
if ( [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){ ...
- ES6新语法学习
参考: 1.http://es6.ruanyifeng.com/#docs/let#let-命令 2.https://reactjs.org/tutorial/tutorial.html 3.http ...
- U盘启动时提示starting cmain,3种终极解决方案
U盘启动时提示“starting cmain”一般是这样子的: <ignore_js_op> 这种情况,一般是制作好了PE启动U盘之后,启动不了才会这样,一般正常情况的话,这一句英文是一闪 ...
- LoadRunner多负载产生器
Executive Summary : The following explains why it is necessary to have about 6 load generators when ...
- Linux中du和df
Linux运维过程中,常常发现du和df返回值不一样,偶尔会发现区别非常大. 特定情况下,可能df看到磁盘已满,可是du推断磁盘剩余空间非常大. 文件系统分配当中的一些磁盘块用来记录它自身的一些数据. ...
- ubuntu将快捷方式复制到桌面
/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok
- java通过http方式下载文件
package com.qiyi; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- struts2上传图片超过大小给出错误提示
struts2上传图片超过大小给出错误提示 今天碰到上传图片太大,上传不上去返回input视图的界面,回显的错误信息却是乱码,整了好久才整出来,在这里做个记录,方便自己以后查阅,也希望能 ...
- Linux机器间ssh免密登录
前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...
- 《UNIX 网络编程 第二版》编译环境的搭建( 运行本专栏代码必读 )
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载http://ishare.iask.sina.com.cn/f/ ...