#include<bits/stdc++.h>
#define debu
using namespace std;
const int maxn=15;
int cas=0,n;
char g[maxn][maxn];
void input()
{
printf("Case %d:\n",++cas);
scanf("%d\n",&n);
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
scanf("%c",&g[i][j]);
getchar();
}
}
void solve()
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
if(g[i][j]=='.')
for(int k=0; k<26; k++)
{
char ch=k+'A';
if(j>0)
if(g[i][j-1]==ch) continue;
if(j<n-1)
if(g[i][j+1]==ch) continue;
if(i>0)
if(g[i-1][j]==ch) continue;
if(i<n-1)
if(g[i+1][j]==ch) continue;
//cout<<ch<<endl;
g[i][j]=ch;
break;
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
printf("%c",g[i][j]);
printf("\n");
}
}
int main()
{
#ifdef debug
freopen("in.in","r",stdin);
#endif // debug
int t;
scanf("%d",&t);
while(t--)
{
input();
solve();
}
return 0;
}
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2515
题解:求从上到下,从左到右字典序最小解。从第一位开始从A到Z尝试(若合法则此解一定字典序最小),由于从A到Z有26字母,而冲突仅有4个,所以一定有解且字典序最小。