fork(5) download
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define MM 30
  5.  
  6. char matrix[MM][MM];
  7. int vis[MM][MM];
  8. int ret,row,col;
  9.  
  10. int inx[4]={0,-1,0,1}; //right,up,left,down
  11. int iny[4]={1,0,-1,0};
  12.  
  13. void set()
  14. {
  15. memset(matrix,0,sizeof(matrix));
  16. memset(vis,0,sizeof(vis));
  17. }
  18.  
  19. void dfs(int x,int y)
  20. {
  21. int i,j,k;
  22. for(k=0;k<4;k++)
  23. {
  24. i=x+inx[k];
  25. j=y+iny[k];
  26. if(i>=0 && i<row && j>=0 && j<col && matrix[i][j]=='X' && !vis[i][j])
  27. {
  28. vis[i][j]=1;
  29.  
  30. }
  31. else if(i>=0 && i<row && j>=0 && j<col && matrix[i][j]=='O' && !vis[i][j])
  32. {
  33. if(k==0)
  34. {
  35. if(matrix[i][j+1]=='.' && i>=0 && i<row && j+1>=0 && j+1<col && !vis[i][j+1])
  36. {
  37. matrix[i][j]='.';
  38. matrix[i][j+1]='O';
  39. vis[i][j]=1;
  40. dfs(i,j);
  41. }
  42.  
  43. }
  44. else if(k==1)
  45. {
  46. if(matrix[i-1][j]=='.' && i-1>=0 && i-1<row && j>=0 && j<col && !vis[i-1][j])
  47. {
  48. matrix[i][j]='.';
  49. matrix[i-1][j]='O';
  50. vis[i][j]=1;
  51. dfs(i,j);
  52. }
  53.  
  54. }
  55. else if(k==2)
  56. {
  57. if(matrix[i][j-1]=='.' && i>=0 && i<row && j-1>=0 && j-1<col && !vis[i][j-1])
  58. {
  59. matrix[i][j]='.';
  60. matrix[i][j-1]='O';
  61. vis[i][j]=1;
  62. dfs(i,j);
  63. }
  64.  
  65. }
  66. else if(k==3)
  67. {
  68. if(matrix[i+1][j]=='.' && i+1>=0 && i+1<row && j>=0 && j<col && !vis[i+1][j])
  69. {
  70. matrix[i][j]='.';
  71. matrix[i+1][j]='O';
  72. vis[i][j]=1;
  73. dfs(i,j);
  74. }
  75.  
  76. }
  77. }
  78. else if(i>=0 && i<row && j>=0 && j<col && matrix[i][j]=='C' && !vis[i][j])
  79. {
  80. ret++;
  81. matrix[i][j]='.';
  82. vis[i][j]=1;
  83. dfs(i,j);
  84. }
  85. else if(i>=0 && i<row && j>=0 && j<col && matrix[i][j]=='.' && !vis[i][j])
  86. {
  87. vis[i][j]=1;
  88. dfs(i,j);
  89. }
  90. }
  91. }
  92.  
  93. int main()
  94. {
  95. int test,t;
  96. int i,j,flag;
  97. scanf("%d",&test);
  98. for(t=0;t<test;t++)
  99. {
  100. scanf("%d%d",&row,&col);
  101. set();
  102. for(i=0;i<row;i++)
  103. {
  104. scanf("%s",matrix[i]);
  105. }
  106. flag=0;
  107. for(i=0;i<row;i++)
  108. {
  109. for(j=0;j<col;j++)
  110. {
  111. if(matrix[i][j]=='S')
  112. {
  113. ret=0;
  114. flag=1;
  115. matrix[i][j]='.';
  116. vis[i][j]=1;
  117. dfs(i,j);
  118. break;
  119. }
  120. }
  121. if(flag) break;
  122. }
  123. printf("%d\n",ret);
  124. }
  125. return 0;
  126. }
  127.  
Success #stdin #stdout 0.02s 1728KB
stdin
3
3 4
S.OC
..O.
.XCX
4 6
S.X.CC
..XOCC
...O.C
....XC
4 4
.SXC
OO.C
..XX
.CCC
stdout
1
6
3