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内 ...
随机推荐
- 支持C++11标准
设置CB下的GCC. Settings->Compiler->Compiler Settings勾选Have g++ follow the C++11 ISO C++ language s ...
- idea没有subversion问题
问题描述:idea导入svn项目,但点击项目文件右键没有找到subversion选项.同时,idea界面底部没有version control菜单. 解决方法:原因是idea没有启动版本控制.点击id ...
- Java开发笔记(一百零二)信号量的请求与释放
前面介绍了同步与加锁两种并发处理机制,虽然加锁比起同步要灵活一些,但是加锁在某些高级场合依然力有未逮,包括但不限于下列几点:1.某块代码被加锁之后,对其它线程而言就处于繁忙状态,缺乏弹性的阈值范围:2 ...
- PyTorch学习笔记之DataLoaders
A DataLoader wraps a Dataset and provides minibatching, shuffling, multithreading, for you. import t ...
- python--文本处理1
1.字符和字符值之间的转换 内建函数:ord(),chr() >>> print ord("a") 97 >>> print chr(97) a ...
- 如何用迅雷下载在网页中的Flash动画或课件
对于框架网页而言,看地址栏可以发现后缀不是SWF,就是说该网站没有直接把Flash给你,右击该Flash也没有下载选项. 此时虽然右下角是Flash,但是左边和上面网页部分还是正常的元素,右击这些 ...
- 浅谈PropertyChanged是如何被初始化的?
http://www.cnblogs.com/wpcockroach/p/3909081.html
- Python+Selenium框架-unittest执行脚本方法之addTest
本文开始介绍如何通过unittest来管理和执行测试用例,这一篇介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这 ...
- 《Python核心编程》数字类型
1.数字类型简单介绍 Python中数字类型包含:整型.长整型.布尔型.双精度浮点型.十进制浮点型.复数.这些数字类型都是不可变类型.也就是说,改变了数字的值会生成新的对象. 在Python中删除数字 ...
- sublime 汇总
此文内容有原创,还有各种其他博客抄来的经验,技巧,纯属个人使用心得. http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html ...