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("\n");

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("\n");

32     }

33     return 0;

34 }
View Code

 

 

 

 

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

你可能感兴趣的:(codeforces)