题意:给定一张n*m的图,上面有4种线段,'-','|','\','/',判断图上是否有且仅有一条这样的线段。

题解:遍历每个点,如果不是空,就将它所在的直线给删掉,并且记录值加一,最后判断记录是否等于一即可。

View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 char map[20][20];
 6 int r,c;
 7 int dr[200][2];
 8 void dfs(int x,int y,char ch)
 9 {
10     if(x>=0&&x<r&&y>=0&&y<c)
11     {
12         if(map[x][y]!=ch)
13             return;
14         map[x][y]='.';
15         dfs(x+dr[ch][0],y+dr[ch][1],ch);
16     }
17 }
18 int main()
19 {
20     int T;
21     dr['-'][0]=0,dr['-'][1]=1;
22     dr['|'][0]=1,dr['|'][1]=0;
23     dr['\\'][0]=1,dr['\\'][1]=1;
24     dr['/'][0]=1,dr['/'][1]=-1;
25     for(scanf("%d",&T);T;T--)
26     {
27         scanf("%d%d",&r,&c);
28         for(int i=0;i<r;i++)
29             scanf("%s",map[i]);
30         int ret=0;
31         for(int i=0;i<r;i++)
32         {
33             for(int j=0;j<c;j++)
34             {
35                 if(map[i][j]!='.')
36                 {
37                     ret++;
38                     if(ret>1)
39                     {
40                         i=20;
41                         break;
42                     }
43                     dfs(i,j,map[i][j]);
44                 }
45             }
46         }
47         if(ret==1)
48             printf("CORRECT\n");
49         else
50             printf("INCORRECT\n");
51     }
52     return 0;
53 }