HDU 4158 GO(DFS)

题目链接

又是细节啊,结束条件判错了,导致没有全部搜完就结束了,这个错误,检查了好几遍都没发现,终于找AC代码对拍数据,发现了。。。

 1 #include <stdio.h>

 2 #include <string.h>

 3 int p[101][101],b,w,n,bnu,wnu,bb,ww,sum,z;

 4 int x[4] = {0,0,-1,1};

 5 int y[4] = {1,-1,0,0};

 6 void dfs(int r,int c)

 7 {

 8     sum ++;

 9     int i;

10     for(i = 0;i <= 3;i ++)

11     {

12         if(r+x[i] <= n&&r+x[i] >= 1&&c+y[i]>=1&&c+y[i]<=n)

13         {

14             if(!p[r+x[i]][c+y[i]])

15             {

16                 p[r+x[i]][c+y[i]] = 3;

17                 dfs(r+x[i],c+y[i]);

18             }

19             else if(p[r+x[i]][c+y[i]] == 1)

20             {

21                 bb = 1;

22             }

23             else if(p[r+x[i]][c+y[i]] == 2)

24             {

25                 ww = 1;

26             }

27             if(bb&&ww)

28             {z = 1;}

29         }

30     }

31     return ;

32 }

33 int main()

34 {

35     int i,j,sv,ev;

36     while(scanf("%d",&n)!=EOF)

37     {

38         bnu = wnu = 0;

39         for(i = 1;i <= n;i ++)

40         for(j = 1;j <= n;j ++)

41         p[i][j] = 0;

42         if(!n) break;

43         scanf("%d%d",&b,&w);

44         for(i = 1;i <= b;i ++)

45         {

46             scanf("%d%d",&sv,&ev);

47             p[sv][ev] = 1;

48         }

49         for(i = 1;i <= w;i ++)

50         {

51             scanf("%d%d",&sv,&ev);

52             p[sv][ev] = 2;

53         }

54         for(i = 1;i <= n;i ++)

55         {

56             for(j = 1;j <= n;j ++)

57             {

58                 bb = ww = 0;

59                 sum = 0;

60                 z = 0;

61                 if(!p[i][j])

62                 {

63                     p[i][j] = 3;

64                     dfs(i,j);

65                     if(!z)

66                     {

67                         if(bb&&!ww)

68                         bnu += sum;

69                         else if(ww&&!bb)

70                         wnu += sum;

71                     }

72                 }

73             }

74         }

75         if(bnu == wnu)

76         {

77             printf("Draw\n");

78         }

79         else if(bnu > wnu)

80         {

81             printf("Black wins by %d\n",bnu-wnu);

82         }

83         else if(wnu > bnu)

84         {

85             printf("White wins by %d\n",wnu-bnu);

86         }

87     }

88     return 0;

89 }

你可能感兴趣的:(HDU)