PKU 3561 Pseudographical recognizer

PKU 3561 Pseudographical recognizer

问题:
http://poj.org/problem?id=3561

思路:
简单题,结果却WA了一次
注意题目中给出的定义:  in adjacent cells
就是说,这些符号必须是连续的,否则就要算两个
另一点就是符号'\'需要写成'\\',开始编译错误了呵呵

代码:
 1  #include < stdio.h >
 2  #include < stdlib.h >
 3  #include < string .h >
 4  #define  MAX_LEN 101
 5  #define  is_valid(x, y) ((x)>=0 && (x)<N && (y)>=0 && (y)<M)
 6  int  N, M;
 7  char  image[MAX_LEN][MAX_LEN];
 8  int  visited[MAX_LEN][MAX_LEN];
 9  int  hor, vert, diag;
10 
11  void
12  mark( int  i,  int  j,  int  dx,  int  dy,  char  ch)
13  {
14       while (is_valid(i + dx, j + dy)  &&  image[i + dx][j + dy] == ch) {
15          visited[i + dx][j + dy]  =   1 ;
16          i  +=  dx;
17          j  +=  dy;
18      }
19  }
20 
21  void
22  solve()
23  {
24       int  i, j;
25       char  ch;
26       for (i = 0 ; i < N; i ++ ) {
27           for (j = 0 ; j < M; j ++ ) {
28              ch  =  image[i][j];
29               if (ch != ' . '   &&   ! visited[i][j]) {
30                  visited[i][j]  =   1 ;
31                   switch (ch) {
32                       case   ' - ' :
33                           ++ hor;
34                          mark(i, j,  0 - 1 , ch);
35                          mark(i, j,  0 1 , ch);
36                           break ;
37                       case   ' | ' :
38                           ++ vert;
39                          mark(i, j,  - 1 0 , ch);
40                          mark(i, j,  1 0 , ch);
41                           break ;
42                       case   ' \\ ' :
43                           ++ diag;
44                          mark(i, j,  1 1 , ch);
45                          mark(i, j,  - 1 - 1 , ch);
46                           break ;
47                       case   ' / ' :
48                           ++ diag;
49                          mark(i, j,  1 - 1 , ch);
50                          mark(i, j,  - 1 1 , ch);
51                           break ;
52                  }
53              }
54          }
55      }
56  }
57 
58  int
59  main( int  argc,  char   ** argv)
60  {
61       int  i, tests;
62      scanf( " %d " & tests);
63       while (tests -- ) {
64          scanf( " %d %d " & N,  & M);
65           for (i = 0 ; i < N; i ++ )
66              scanf( " %s " , image[i]);
67          memset(visited,  0 sizeof (visited));
68          hor  =  vert  =  diag  =   0 ;
69          solve();
70           if (hor + vert + diag  ==   1 )
71              printf( " CORRECT\n " );
72           else
73              printf( " INCORRECT\n " );
74      }
75  }

你可能感兴趣的:(PKU 3561 Pseudographical recognizer)