Where's Waldorf?

使用函数,结构会更清晰一些;

fgets() 使用错,改为 scanf();

边界判断错误(每一列下标都是从 0 开始,以 n-1 结尾),判断是否超出边界时,错写为 len*d[s][0];

d[8][2] 的第5项错写成 {0,1}了。

不管咋样,反正 AC 了。。

 1 /* UVa 10010 - Where's Waldorf? */
2 # include <stdio.h>
3 # include <string.h>
4 # include <ctype.h>
5
6 # define IN(up, x, low) (((x)<=(up)) && ((x)>=(low)))
7 # define N 55
8
9 const int d[8][2] = {{-1,0},{-1,1},{0,1},{1,1},{1,0},{-1,1},{0,-1},{-1,-1}};
10
11 char grid[N][N];
12 char word[N*2];
13 int T, m, n, k, x, y;
14
15 int main()
16 {
17 int i, j, cnt, s, len;
18
19 scanf("%d", &T);
20 while (T--)
21 {
22 scanf("%d %d", &m, &n);
23 for (i = 1; i <= m; ++i)
24 scanf("%s", grid[i]);
25 for (i = 1; i <= m; ++i)
26 for (j = 0; j<=n && grid[i][j]; ++j)
27 grid[i][j] = toupper(grid[i][j]);
28 scanf("%d", &k);
29 while (k--)
30 {
31 scanf("%s", word);
32 len = strlen(word);
33 for(i = 0; i < len; ++i)
34 word[i] = toupper(word[i]);
35
36 for (i = 1; i <= m; ++i)
37 for (j = 0; j < n; ++j)
38 {
39 if (grid[i][j] != word[0]) continue;
40 cnt = 0;
41 for (s = 0; s < 8; ++s)
42 {
43 if (IN(m,i+(len-1)*d[s][0],1) && IN(n-1,j+(len-1)*d[s][1],0))
44 {
45 ++cnt;
46 while (cnt < len)
47 {
48 if (grid[i+cnt*d[s][0]][j+cnt*d[s][1]] == word[cnt])
49 ++cnt;
50 else
51 {
52 cnt = 0;
53 break;
54 }
55 }
56 if (cnt == len)
57 {
58 x = i, y = j+1;
59 s = 8;
60 i = m, j = n;
61 break;
62 }
63 }
64 }
65 }
66 printf("%d %d\n", x, y);
67 }
68 if(T) printf("\n");
69 }
70
71 return 0;
72 }



原文地址:https://www.cnblogs.com/JMDWQ/p/2397751.html