对于这题本人刚开始的时候觉得应该用DFS来解决实现这个问题,但由于本人对于DFS并不是太熟,所以就放弃了这个想法;
但又想了想要按照这个要求实现问题则必须是黑白相间,然后把是字符是'B'或'W'改为'-',即可;
下面贴一下我的代码吧
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define N 100+10 5 using namespace std; 6 7 char maze[N][N]; 8 char str[N][N]; 9 int n,m; 10 11 int main(void) 12 { 13 while(~scanf("%d%d",&n,&m)) 14 { 15 memset(str,0,sizeof(str)); 16 for(int i=0;i<n;++i) 17 scanf("%s",maze[i]); 18 for(int i=0;i<n;++i) 19 for(int j=0;j<m;++j){ 20 if(maze[i][j]=='-') 21 str[i][j] = '-'; 22 else{ 23 if((i+j)%2==1) str[i][j]='B'; 24 else str[i][j]='W'; 25 } 26 } 27 for(int i=0;i<n;++i){ 28 for(int j=0;j<m;++j) 29 printf("%c",str[i][j]); 30 printf(" "); 31 } 32 } 33 34 return 0; 35 }
下面我再插入本人从其他大神的博客上复制的有关于DFS解决这题的代码:
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 6 int n,m; 7 char Map[110][110]; 8 int Dir[][2]={{0,1},{0,-1},{-1,0},{1,0}}; 9 void DFS(int x,int y,int num) 10 { 11 if(num==0) 12 { 13 Map[x][y]='W'; 14 } 15 else 16 { 17 Map[x][y]='B'; 18 } 19 int Fx,Fy; 20 for(int i=0;i<4;i++) 21 { 22 Fx=x+Dir[i][0]; 23 Fy=y+Dir[i][1]; 24 if(Fx>=0&&Fx<n&&Fy>=0&&Fy<m&&Map[Fx][Fy]=='.') 25 { 26 if(num==0) 27 { 28 DFS(Fx,Fy,1); 29 } 30 else 31 { 32 DFS(Fx,Fy,0); 33 } 34 } 35 } 36 } 37 int main() 38 { 39 scanf("%d %d",&n,&m); 40 for(int i=0;i<n;i++) 41 { 42 scanf("%s",Map[i]); 43 } 44 for(int i=0;i<n;i++) 45 { 46 for(int j=0;j<m;j++) 47 { 48 if(Map[i][j]=='.') 49 { 50 DFS(i,j,0); 51 } 52 } 53 } 54 for(int i=0;i<n;i++) 55 { 56 printf("%s ",Map[i]); 57 } 58 return 0; 59 }