Problem A
Fill the Square
Input: Standard Input
Output: Standard Output
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 filled 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 filled with alphabets. In doing so you have to meet the following rules:
- Make sure no adjacent cells contain the same letter; two cells are adjacent if they share a common edge.
- There could be many ways to fill 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 first 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, first output Case #: ( # replaced by case number ) and in the next n lines output the input matrix with the empty cells filled heeding the rules above.
Sample Input Output for Sample Input
|
2 3 ... ... ... 3 ... A.. ... |
Case 1: ABA BAB ABA Case 2: BAB ABA BAB |
Problemsetter: Sohel Hafiz
思路:暴力涂色。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int mm=15;
char s[mm][mm];
int n;
bool ok(int x,int y,int z)
{ char zz='A'+z;
if(x&&s[x-1][y]==zz)return 0;
if(y&&s[x][y-1]==zz)return 0;
if(y<n-1&&s[x][y+1]==zz)return 0;
if(x<n-1&&s[x+1][y]==zz)return 0;
return 1;
}
void addcol(int x,int y)
{
for(int i=0;i<26;++i)
if(ok(x,y,i))
{s[x][y]='A'+i;return;}
}
int main()
{ int cas;
while(~scanf("%d",&cas))
{ int z=0;
while(cas--)
{ ++z;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%s",s[i]);
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
if(s[i][j]=='.')
addcol(i,j);
printf("Case %d:\n",z);
for(int i=0;i<n;++i)
printf("%s\n",s[i]);
}
}
}
填充方格算法题解析
本文介绍了一道算法题目——填充方格。该题目要求在遵循特定规则的情况下使用英文字母填充一个带有部分预填充字母的网格。文章详细解释了输入输出格式、样例输入输出及实现思路。
1027

被折叠的 条评论
为什么被折叠?



