题目链接:https://vjudge.net/problem/UVA-11520
这道题我们发现$nleq 10$,所以直接进行暴力枚举。
因为根据字典序所以每个位置试一下即可,这样的复杂度不过也就是$O(26 imes n^2)$。
注意此题中的输入输出有点bug,可以把每一行看成一个字符串进行输入输出(因为其中并没有空格)。
AC代码:
1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 int n; 7 char g[15][15]; 8 9 int main(){ 10 int T; 11 scanf("%d",&T); 12 for(int kase=1;kase<=T;kase++){ 13 scanf("%d",&n); 14 for(int i=0;i<n;i++) scanf("%s",g[i]); 15 for(int i=0;i<n;i++){ 16 for(int j=0;j<n;j++){ 17 if(g[i][j]=='.'){ 18 for(char k='A';k<='Z';k++){ 19 bool ok=1; 20 if(i>0&&g[i-1][j]==k) ok=0; 21 if(j>0&&g[i][j-1]==k) ok=0; 22 if(i<n-1&&g[i+1][j]==k) ok=0; 23 if(j<n-1&&g[i][j+1]==k) ok=0; 24 if(ok){ g[i][j]=k; break;} 25 } 26 } 27 } 28 } 29 printf("Case %d: ",kase); 30 for(int i=0;i<n;i++) printf("%s ",g[i]); 31 } 32 return 0; 33 }