zoukankan      html  css  js  c++  java
  • Codeforces 445 A DZY Loves Chessboard【DFS】

    题意:给出n*m的棋盘,在‘.’处放上B或者W,最后要求所有的B和W都不相邻

    先把棋盘的点转化成‘B’,再搜,如果它的四周存在‘B’,则将它变成'W'

    一直挂在第五个数据的原因是,没有dfs(nx,ny)

    搜索果断弱爆了= =(差不多写了一个小时)

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int INF = (1<<30)-1;
    15 const int mod=1000000007;
    16 const int maxn=100005;
    17 char g[105][105];
    18 int n,m;
    19 int dir[4][2]={-1,0,1,0,0,1,0,-1};
    20 
    21 void dfs(int x,int y){
    22     if(x<1||x>n||y<1||y>m||g[x][y]=='-') return;
    23     if(g[x][y]=='B'){
    24         for(int i=0;i<4;i++){
    25         int nx=x+dir[i][0];
    26         int ny=y+dir[i][1];
    27         if(g[nx][ny]=='B') {
    28             g[nx][ny]='W';
    29             dfs(nx,ny);
    30         }
    31         }
    32     }
    33     if(g[x][y]=='W'){
    34         for(int i=0;i<4;i++){
    35         int nx=x+dir[i][0];
    36         int ny=y+dir[i][1];
    37         if(g[nx][ny]=='W') {
    38             g[nx][ny]='B';
    39             dfs(nx,ny);
    40         }
    41         }        
    42     }    
    43 }
    44 
    45 
    46 
    47 int main(){
    48     scanf("%d %d",&n,&m);
    49     for(int i=1;i<=n;i++)
    50      for(int j=1;j<=m;j++)
    51      cin>>g[i][j];
    52      
    53      for(int i=1;i<=n;i++){
    54          for(int j=1;j<=m;j++)
    55              if(g[i][j]=='.') g[i][j]='B';    
    56      }
    57      
    58      for(int i=1;i<=n;i++)
    59          for(int j=1;j<=m;j++) dfs(i,j);
    60      
    61      for(int i=1;i<=n;i++){
    62          for(int j=1;j<=m;j++)
    63          printf("%c",g[i][j]);
    64          printf("
    ");
    65      }
    66      return 0;
    67 }
    View Code

     后来翻别人的代码来看,发现不用搜索= =判断i+j为奇数,放上'B',否则放上'W'

    真是too young---------

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int INF = (1<<30)-1;
    15 const int mod=1000000007;
    16 const int maxn=100005;
    17 
    18 int main(){
    19     int n,m;
    20     char ch;
    21     scanf("%d %d",&n,&m);
    22     for(int i=0;i<n;i++){
    23         for(int j=0;j<m;j++){
    24             cin>>ch;
    25             if(ch=='.'){
    26                 if((i+j)%2) cout<<'B';
    27                 else cout<<'W';
    28             }
    29             else cout<<'-';            
    30         }
    31         printf("
    ");
    32     }
    33     return 0;
    34 }
    View Code

    加油啊,加油---go--go--go--

  • 相关阅读:
    pku3486Computers 动态规划
    pku2229sumsets(zjgsu,分花)
    pku2663Tri Tiling递推题
    pku1015Jury Compromise 动态规划
    pku3508Hide That Number一道加密算法题
    pku动态规划题目列表
    浅谈XXE攻击
    PHP核心配置详解
    SSRF漏洞用到的其他协议(dict协议,file协议)
    php中使用CURL之php curl详解
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4433082.html
Copyright © 2011-2022 走看看