题意:
填满一个正方形,使得任意相邻的字母不同且字典序最小
思路:
当遇到待填写的位置是,按字典序选择字母判断其四周是否有重,没有就选定这个字母
代码:
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n;
char gird[15][15];
char fill(int i, int j) {
char a = 'A';
while(1) {
if(i>0 && gird[i-1][j] == a) {
a++;
continue;
}
if(j>0 && gird[i][j-1] == a) {
a++;
continue;
}
if(i<n-1 && gird[i+1][j] == a) {
a++;
continue;
}
if(j<n-1 && gird[i][j+1] == a) {
a++;
continue;
}
break;
}
return a;
}
int main() {
int kase;
scanf("%d", &kase);
for(int k=1; k<=kase; k++) {
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%s", gird[i]);
}
printf("Case %d:\n", k);
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++)
if(gird[i][j] == '.') gird[i][j] = fill(i, j);
}
for(int i=0; i<n; i++) printf("%s\n", gird[i]);
}
return 0;
}