Description
在一个n*n的网格中填写了一些大写字母,你的任务是把剩下的格子中也填满大写字母,使得任意相邻格子中的字母不同.如果有多种填法,则要求按照从上到下,从左到右的顺序把所有格子连起来得到的字符串的字典序应最小.
Input
多组测试数据,每组测试数据的第一行为一个正整数n.(1<=n<=10),接下来n行分别有n个字符代表n*n的网格,为了清晰起见,用’.’代表没有大写字母的网格.
Output
对于每组数据输出填满大写字母后的网格.每组测试数据间有一个空行,最后一组测试数据后面没有空行.
Sample Input
3
...
...
...
3
...
A..
...
Sample Output
ABA
BAB
ABA
BAB
ABA
BAB
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
char num[27] = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
char str[15][15];
int main()
{
int i,k,j,n,f = 0;
while(~scanf("%d",&n))
{
memset(str,'\0',sizeof(str));
for(i=0;i<=n-1;i++)
{
scanf("%s",&str[i]);
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
if(str[i][j] == '.')
{
for(k=0;k<=25;k++)
{
if(i-1 >= 0 && str[i-1][j] == num[k])
continue;
if(j-1 >= 0 && str[i][j-1] == num[k])
continue;
if(i+1 <= n-1 && str[i+1][j] == num[k])
continue;
if(j+1 <= n-1 && str[i][j+1] == num[k])
continue;
str[i][j] = num[k];
}
}
}
}
if(f != 0)
printf("\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
printf("%c",str[i][j]);
}
printf("\n");
}
f = 1;
}
return 0;
}