题目链接:
题目大意:
给一个矩阵,要求在上面填上A到Z的字母,使得每个格子的字母与其相邻格子的字母不同。
思路:
直接按照从左到右,从上到下的顺序,一个格子一个格子地填。每个格子从A~Z枚举,看哪个符合条件就填上。然后直接输出即可。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 12;
char map[maxn][maxn];
int n;
char fill(int row, int col){
for(int ch='A'; ch<='Z'; ++ch){
if(ch != map[row][col-1] &&
ch != map[row][col+1] &&
ch != map[row+1][col] &&
ch != map[row-1][col]
)
return ch;
}
}
void solve(){
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j)
if(map[i][j] == '.')
map[i][j] = fill(i,j);
for(int i=1; i<=n; ++i)
puts(map[i]+1);
}
int main(){
int T, cas=1;
scanf("%d", &T);
while(T--){
printf("Case %d:\n", cas++);
scanf("%d", &n);
memset(map, 0, sizeof(map));
for(int i=1; i<=n; ++i)
scanf("%s", map[i]+1);
solve();
}
return 0;
}