更新时间:2022-08-19 22:21:35
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N = 15; char map[N][N]; int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}}; //判断当前字母是否满足 bool ok(int x , int y , int n , char ch){ bool mark = true; for(int i = 0 ; i < 4 ; i++){ int tmpx = x+dir[i][0]; int tmpy = y+dir[i][1]; if(tmpx >= 0 && tmpy < n && map[tmpx][tmpy] == ch) mark = false; } return mark; } void dfs(int x , int y , int n){ if(map[x][y] != '.') return; for(int i = 65 ; i < 65+26 ; i++){ if(ok(x , y , n , i)){ map[x][y] = i; break; } } for(int i = 0 ; i < 4 ; i++){ int tmpx = x+dir[i][0]; int tmpy = y+dir[i][1]; if(tmpx >= 0 && tmpy < n) dfs(tmpx , tmpy , n); } } void solve(int n){ for(int i = 0 ; i < n ; i++){ for(int j = 0 ; j < n ; j++){ if(map[i][j] == '.') dfs(i , j , n); } } for(int i = 0 ; i < n ; i++){ for(int j = 0 ; j < n ; j++) printf("%c" , map[i][j]); printf("\n"); } } int main(){ int n , T , Case = 1; scanf("%d" , &T); while(T--){ scanf("%d%*c" , &n); for(int i = 0 ; i < n ; i++) gets(map[i]); printf("Case %d:\n" , Case++); solve(n); } return 0; }