A Za, A Za, Fighting...

坚信:勤能补拙

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, 01, ch);
36                         break;
37                     case '|':
38                         ++vert;
39                         mark(i, j, -10, ch);
40                         mark(i, j, 10, ch);
41                         break;
42                     case '\\':
43                         ++diag;
44                         mark(i, j, 11, 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, -11, 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, 0sizeof(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 }

posted on 2010-10-22 21:23 simplyzhao 阅读(184) 评论(0)  编辑 收藏 引用 所属分类: G_其他


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜