uva 11520 Fill the Square

https://vjudge.net/problem/UVA-11520

题意:

给出一个n * n规模的网格,其中有些格子填充了大写字母,有些格子是空的。现在要把剩下的格子全部填充上大些字母,要求相邻的格子的字母不能相同(相邻的格子为有公共边的格子),并且填充完之后字典序最小,字典序是行优先。

思路:

把周围用过的字母统计一下,之后吧没用过的最小的给它填上就ok。

QAQ,因为忘记这个格子没有填充过才能填充,所以wa了好多发,真不应该!!!切记仔细与专注。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 bool a[50];
 5 char b[15][15];
 6 
 7 int main()
 8 {
 9     int t;
10 
11     scanf("%d",&t);
12 
13     int cas = 0;
14 
15     while (t--)
16     {
17         int n;
18 
19         scanf("%d",&n);
20 
21         for (int i = 0;i < n;i++)
22             scanf("%s",b[i]);
23 
24         for (int i = 0;i < n;i++)
25             for (int j = 0;j < n;j++)
26         {
27             memset(a,0,sizeof(a));
28 
29             if (b[i][j] != '.') continue;
30 
31             if (i - 1 >= 0)
32             {
33                 if (b[i-1][j] != '.')
34                 {
35                     char x = b[i-1][j];
36                     a[x-'A'] = 1;
37                 }
38             }
39             if (j - 1 >= 0)
40             {
41                 if (b[i][j-1] != '.')
42                 {
43                     char x = b[i][j-1];
44                     a[x-'A'] = 1;
45                 }
46             }
47             if (i + 1 < n)
48             {
49                 if (b[i+1][j] != '.')
50                 {
51                     char x = b[i+1][j];
52                     a[x-'A'] = 1;
53                 }
54             }
55             if (j + 1 < n)
56             {
57                 if (b[i][j+1] != '.')
58                 {
59                     char x = b[i][j+1];
60                     a[x-'A'] = 1;
61                 }
62             }
63 
64             char x;
65 
66             for (int k = 0;k <= 'Z' - 'A';k++)
67             {
68                 if (!a[k])
69                 {
70                     x = 'A' + k;
71                     break;
72                 }
73             }
74 
75             b[i][j] = x;
76         }
77 
78         printf("Case %d:\n",++cas);
79 
80 
81         for (int i = 0;i < n;i++)
82             printf("%s\n",b[i]);
83     }
84 
85     return 0;
86 }

 

posted @ 2017-09-29 09:35  qrfkickit  阅读(161)  评论(0编辑  收藏  举报