POJ 3561

题意:给定一张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 }

你可能感兴趣的:(poj)