题目解析:简单的填充,只需在填充时判断是否有冲突。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 15
char map[MAX][MAX];
char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int d[4][2]={-1,0,1,0,0,-1,0,1};
int n;
int main()
{
int T,tot=1;
scanf("%d",&T);
while (T--)
{
int i,j,k,l;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%s",map[i]);
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (map[i][j]>='A'&&map[i][j]<='Z')
continue;
else
{
for (k=0;k<26;k++)
{
int flag=1;
for (l=0;l<4;l++)
{
int dx=d[l][0]+i;
int dy=d[l][1]+j;
if (dx>=0&&dy>=0&&dx<n&&dy<n)
{
if (map[dx][dy]==s[k])
{
flag=0;
break;
}
}
}
if (flag)
{
map[i][j]=s[k];
break;
}
}
}
}
}
printf("Case %d:\n",tot++);
for (i=0;i<n;i++)
{
printf("%s\n",map[i]);
}
}
return 0;
}