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(p31)----Fill the Square

#include #define debu using namespace std; const int maxn=15; int cas=0,n; char g[maxn][maxn]; void ...
  • wang2147483647
  • wang2147483647
  • 2016年02月29日 22:17
  • 178

【贪心】【uva11520】 Fill the Square

填充正方形(Fill the Square, UVa 11520) 在一个n×n网格中填了一些大写字母,你的任务是把剩下的格子中也填满大写字母,使得任意两个相邻格子(即有公共边的格子)中的字母不同。...
  • zy691357966
  • zy691357966
  • 2014年10月15日 00:29
  • 493

UVA11520 Fill the Square 枚举

废话不多说,直接上代码
  • cnyali_ljf
  • cnyali_ljf
  • 2016年08月27日 19:03
  • 295

uva11520 - Fill the Square

题意: 给一个n*n的矩阵,含小数点及A-Z的字母,让你使用A-Z的字母填充小数点使得矩阵每个位置的字母与它的上下左右的字母都不相等,且字典序最小,输出填充后的矩阵。 思路: 枚举26个字母A-...
  • conatic
  • conatic
  • 2016年02月02日 13:55
  • 295

uva11520 Fill the Square

11520 Fill the Square In this problem, you have to draw a square using uppercase English Alphabets....
  • acm_1361677193
  • acm_1361677193
  • 2014年11月07日 13:22
  • 208

UVa11520 - Fill the Square

题目链接简介:方格填字母,相邻的要求互异分析: 题目要求输出字典序最小的方案, 实际上这就是在提示我们这道题的解法: 我们直接贪心的向方格里填数就好了 一开始我还以为要搜索,一道搜到一种合法方...
  • wu_tongtong
  • wu_tongtong
  • 2017年10月15日 14:09
  • 48

11520 - Fill the Square

纯暴力。#include #include #include #include #include using namespace std; const int maxn = 20; cons...
  • THE___BEST
  • THE___BEST
  • 2016年01月19日 15:17
  • 171

Fill the Square

中文题目解释详见我的博客:http://xiaoshig.sinaapp.com/?p=94   In this problem, you have to draw a square using ...
  • u013102172
  • u013102172
  • 2014年07月27日 16:36
  • 770

UVA 11520 Fill the Square

水题。题目大意:在n*n的网格中填了一些大写字母,你的任务是把剩下的格子也填满大写字母,使得任意两个相邻的格子(即有个公共边的格子)中的字母不同,如果有多重填法,按照要求从上到下,左到右的顺序把所有格...
  • murmured
  • murmured
  • 2013年07月29日 18:22
  • 525

UVA 11520 Fill the Square

第一篇题解 题意:一个n*n的网格里面填了些大写字母,把剩下的也填上,使得相邻的两个网格不相同,并且从左到右,从上到下连起来的字典序最小。 直接对每一个没填的网格依次考虑A到Z是否可以。 ...
  • zhaosdfa
  • zhaosdfa
  • 2013年08月16日 14:21
  • 515
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Uva11520 - Fill the Square
举报原因:
原因补充:

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