• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
橘如智
博客园    首页    新随笔    联系   管理    订阅  订阅
codeforces 445A

                  codeforces 445A. DZY Loves Chessboard

1.大意为将‘.’,用B和W填充,且相邻的不可以相同。

可以看出为一个二分图,早先用bfs一直wa找不到原因,后用dfs就ac。

用深度优先搜索遍历所有的点,再用一个变量来记录上一个的值,以便进行B和W的转换。

//dfs版本
#include <iostream>
#include <cstring>
using namespace std;
int n,m;
char tu[105][105];
int up[4]={0,0,1,-1};
int down[4]={1,-1,0,0}; 
bool judge[105][105];
bool t;
void dfs(int x,int y,bool t)
{
	
		if(t)
			tu[x][y]='B';
		else
		    tu[x][y]='W';
		for(int i=0;i<4;i++)
			{
				int nx=x+up[i],ny=y+down[i];
			if(0<=nx&&nx<n&&0<=ny&&ny<m&&tu[nx][ny]=='.'&&judge[nx][ny]==false)	
				{
					dfs(nx,ny,!t);
				}
				
				
			}
		return;

}




int main()
{
	while(cin>>n>>m){
		memset(judge,false,sizeof(judge));
		
		for(int i=0;i<n;i++)
		   for(int j=0;j<m;j++)
		     cin>>tu[i][j];
		for(int i=0;i<n;i++)
		   for(int j=0;j<m;j++)
		   {
		   	t=true;
		   	if(tu[i][j]=='.') 
		   	   dfs(i,j,t);
		   }
		
	for(int i=0;i<n;i++)
		   {
		   	for(int j=0;j<m;j++)
		   	  cout<<tu[i][j];
		   	cout<<endl;
		   }
		
		
	}

 } 

 

 

posted on 2018-01-26 15:43  橘如  阅读(142)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3