Uva11520 - Fill the Square

原创 2015年07月09日 21:31:53

In this problem, you have to draw a square using uppercase English Alphabets.
To be more precise, you will be given a square grid with some empty blocks and others already lled
for you with some letters to make your task easier. You have to insert characters in every empty cell
so that the whole grid is lled with alphabets. In doing so you have to meet the following rules:
1. Make sure no adjacent cells contain the same letter; two cells are adjacent if they share a common
edge.
2. There could be many ways to ll the grid. You have to ensure you make the lexicographically
smallest one. Here, two grids are checked in row major order when comparing lexicographically.
Input
The rst line of input will contain an integer that will determine the number of test cases. Each case
starts with an integer n (n  10), that represents the dimension of the grid. The next n lines will
contain n characters each. Every cell of the grid is either a `.' or a letter from [A, Z]. Here a `.'
represents an empty cell.
Output
For each case, rst output `Case #:' (# replaced by case number) and in the next n lines output the
input matrix with the empty cells lled heeding the rules above.
Sample Input
2
3
...
...
...
3
...
A..
...
Sample Output
Case 1:
ABA
BAB
ABA
Case 2:
BAB
ABA
BAB

#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 15;
int n;
char mp[MAXN][MAXN];
void change(int &x, int &y)
{
    y++;
    if(y>n)
    {
        x++;
        y=1;
    }
}
bool dfs(int x,int y)
{
    if(x==n+1)return true;
    if(mp[x][y]!='.')
    {
        change(x,y);
        if(dfs(x,y))return true;
    }else{
          for(int i='A'; i<='Z'; i++)
          {
            if(mp[x-1][y]!=i&&mp[x+1][y]!=i&&mp[x][y+1]!=i&&mp[x][y-1]!=i)
            {
                mp[x][y] = i;
                int x1 = x,y1 = y;
                change(x1,y1);
                if(dfs(x1,y1))return true;
                mp[x][y] ='.';
            }
          }
    }
    return false;
}
int main()
{
    int t, cs;
    cin>>t;
    for(cs=1; cs<=t; cs++)
    {   
        cin>>n;
        memset(mp,0,sizeof (mp));
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                cin>>mp[i][j];
            }
        }
        dfs(1,1);
        cout<<"Case "<<cs<<":"<<endl;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                cout<<mp[i][j];
            }cout<<endl;
        }
    }
    return 0;
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

uva11520 Fill the Square

贪心

UVa 11520 Fill the Square (贪心&字典序)

11520 - Fill the Square Time limit: 1.000 seconds http://uva.onlinejudge.org/index.php?option=com_...

uva - 11520 - Fill the Square(贪心、字典序)

题意:在一个n*n的网格中填了一些大写字母,你的任务是把剩下的各自中也填满大写字母,使得任意两个相邻的格子(有公共边)中的字母不同。如果有多种解法,则要求按照从上到下、从左到右的顺序把所有格子连接起来...

UVa 11520 - Fill the Square

Problem A Fill the Square Input: Standard Input Output: Standard Output   In this problem, you ...

UVA - 11520 - Fill the Square(贪心)

题意:给定一个n * n(1 的格子中的字母不同,且从上至下,从左至右,组成一个字符串后字典序最小。 由于组成字符串后的长度都为n * n,故字典序越往前的字母决定的优先级越大,所以贪心即可,从...

uva 11520 Fill the Square(枚举)

uva 11520 Fill the Square In this problem, you have to draw a square using uppercase Engl...

UVA 11520 Fill the Square

从上到下从左到右填充可能的最小的字符就行了。 #include #include #include using namespace std; char arr[13][13]; void f...

UVA之Fill the Square

Problem A Fill the Square Input: Standard Input Output: Standard Output   In this problem, you ...

uva 11520

题意:有一个n×n的矩阵,矩阵元素有'.'和大写字母,要求把'.'全部替换为大写字母使每个元素的上下左右的元素和自己不相同,且从左到右从上到下字典序最小,输出矩阵。 题解:n最大10,可以暴力,因为...

【Jason's_ACM_解题报告】Fill the Square

Fill the Square 解题报告
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)