题目大意:在一个n*n的网格中填了一些大写字幕,你的任务是把剩下的格子中也填满大写字母,使得任意两个相邻的格子中的字母不同,如果有多种填法,则要求按照从小到大,从左到右的顺序把所有格子连接起来得到的字符串的字典序应尽量小
解题思路:一一枚举,从小到大开始枚举,如果可以填的话,就直接填下去
#include<cstdio>
#include<cstring>
#define maxn 20
char map[maxn][maxn];
int main() {
int test ,N, mark = 1;
scanf("%d",&test);
while(test--) {
scanf("%d",&N);
for(int i = 0; i < N; i++)
scanf("%s",map[i]);
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
for(int k = 'A'; k <= 'Z'; k++)
if(map[i][j] == '.') {
if(i && map[i-1][j] == k)
continue;
if(i < N - 1 && map[i+1][j] == k)
continue;
if(j && map[i][j-1] == k)
continue;
if(j < N- 1 && map[i][j+1] == k)
continue;
map[i][j] = k;
break;
}
printf("Case %d:\n",mark++);
for(int i = 0; i < N; i++)
printf("%s\n",map[i]);
}
return 0;
}