Uva 11520 填充正方形

Posted 树的种子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva 11520 填充正方形相关的知识,希望对你有一定的参考价值。

题目链接:https://vjudge.net/problem/UVA-11520

题意:

给定一个n*n的正方形,把剩下的格子中填满大写字母,任意两个相邻的格子字母不同,要求最后字典序最小;

 

分析:

第一想法回溯啊,当然是不对的,100个点回溯会死人的!

其实,可以发现,每个点不可能说,由于前面的决策,后来不能满足了,相邻的点有4个,我有26个英文字母。

技术分享
 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int maxn = 10 + 5;
 6 int n;
 7 char maps[maxn][maxn];
 8 
 9 
10 int main()
11 {
12     int t;
13     scanf("%d",&t);
14     int kase = 1;
15     while(t--) {
16         scanf("%d",&n);
17         for(int i=0;i<n;i++)
18             scanf("%s",maps[i]);
19 
20         for(int i=0;i<n;i++) {
21             for(int j=0;j<n;j++) {
22                 if(maps[i][j]==.) {
23                     for(char ch=A;ch<=Z;ch++) {
24                         bool ok = true;
25                         if(i>0&&maps[i-1][j]==ch) ok = false;
26                         if(i<n-1&&maps[i+1][j]==ch) ok = false;
27                         if(j>0&&maps[i][j-1]==ch) ok = false;
28                         if(j<n-1&&maps[i][j+1]==ch) ok = false;
29                         if(ok) {maps[i][j] = ch;break;}
30                     }
31                 }
32             }
33         }
34 
35         printf("Case %d:\n",kase++);
36         for(int i=0;i<n;i++)
37             printf("%s\n",maps[i]);
38 
39     }
40     return 0;
41 }
View Code

 

以上是关于Uva 11520 填充正方形的主要内容,如果未能解决你的问题,请参考以下文章

[2016-03-19][UVA][11520][Fill the Square]

Uva 11520 - Fill the Square 贪心 难度: 0

UVa11520 Fill the Square (字典序枚举)

Uva 填充正方形

UVA - 11520 - Fill the Square(贪心)

习题 7-6 UVA - 12113Overlapping Squares