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

来源:互联网 发布:比价软件app 编辑:程序博客网 时间:2024/06/07 20:13

题目链接: 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 longusing namespace std;char a[150][150];int vis[150][150];int n,m;void dfs(int x, int y,int B){    if(x>n || x<1) return;//判断是否越界或已经访问过    if(y>m || y<1) return;    if(vis[x][y] || a[x][y]=='-') return;    vis[x][y] = 1;//涂色    if(B) a[x][y] = 'B';    else a[x][y] = 'W';    dfs(x,y+1,!B);//四个方向都填相反的颜色    dfs(x,y-1,!B);    dfs(x+1,y,!B);    dfs(x-1,y,!B);}int main(){    scanf("%d%d",&n,&m);    memset(a,0,sizeof(a));    for(int i = 1; i<=n; i++)        scanf("%s",a[i]+1);        //由于某些格子可能是封闭的,所以要逐个格子去判断是否还需要填色    for(int i = 1; i<=n; i++)    for(int j = 1; j<=m; j++)    {        if(a[i][j]=='-')            vis[i][j] = 1;        else if(!vis[i][j])        {            dfs(i,j,1);        }    }    for(int i = 1; i<=n; i++)        puts(a[i]+1);    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 母亲判刑孩子未成年无人监管怎么办 高三了数学30分怎么办 母猪发烧耳朵放血止不住了怎么办? 青春期孩子动手打父母该怎么办 20岁睡觉不老实怎么办 孕妇梦见钱掉了怎么办 小孩晚上睡觉鼻子塞怎么办 宝宝晚上睡觉鼻子塞怎么办 按摩后吹冷气发冷怎么办 碰到特别细心敏感的下属怎么办 睡觉压的肩膀疼怎么办 睡觉感觉被压住动弹不得怎么办 越想睡觉越睡不着怎么办 腿被裤子染黑了怎么办 肚子上的松皮怎么办 在公司天天背锅怎么办 职场老实背锅怎么办 三星a8充不了电怎么办 果6软件连不上网怎么办 孩子在幼儿园磕伤了怎么办 小孩在幼儿园摔骨折了怎么办 孩子在幼儿园摔骨折了怎么办 大腿被撞了很痛怎么办 马面褶子坏了怎么办 纱料衣服有褶怎么办 裙子如果后背那里小了怎么办 湖州耳朵鸣很严重怎么办 预授权撤销错了怎么办 打酒店里小卡片电话被骗怎么办 本科错过了选导师该怎么办 本科导师威胁学生不让毕业怎么办 意向导师名额满了怎么办? 扔的瓶子被限制怎么办 左钝缘支起始部重度狭窄怎么办 吃了抑郁症药困怎么办 如果股票退市持股人怎么办 电信身份信息审核失败怎么办 打完肌肉针肿了怎么办 refa掉了一个球怎么办 左腿比右腿粗怎么办 产妇上火怎么办吃什么下火呢