Uva11520 - Fill the Square
2015-07-09 21:31
513 查看
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
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; }
相关文章推荐
- Java 练习(多态,instanceof)
- Linux进程调度算法之O(1)算法
- (3)全e化的管理系统条件-3
- 赋值操作符和拷贝构造函数
- CSS3学习内容与心得
- 《学习OpenCV》第三章课后题8-a
- Oracle常用SQL语句
- UINavigationController
- css3 变形记
- Highcharts使用====一些问题记录
- 关于递归自己的总结
- 磁盘调度算法
- Visual Studio Tools for Apache Cordova 入门
- Asp.net mvc5 系列笔记
- hihocoder 1039 字符消除 C++程序
- C++ cin.getline() , cin.get(), getline()
- binder机制
- 应用Django构建工作流管理模块(一)
- java开发连接池配置方法总结
- 用Python中的list分片方法解决约瑟夫环问题