Advertisement
Guest User

yeee

a guest
Jan 24th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <bitset>
  4. #include <queue>
  5. #define MAX 104
  6. #define NS 0101
  7. #define EV 1010
  8. using namespace std;
  9.  
  10. ifstream fin("pereti.in");
  11. ofstream fout("pereti.out");
  12.  
  13. int n, m;
  14.  
  15. int di[5]= {-1, 0, +1, 0};
  16. int dj[5]= {0, +1,0, -1};
  17. queue<pair<int, int> > q;
  18. int a[MAX][MAX];
  19. int aux[MAX][MAX];
  20.  
  21. void gard()
  22. {
  23. int i, j;
  24. for (j = 1; j <= m; j++)
  25. {
  26. if ((a[1][j] & 8) != 0)
  27. {
  28. a[0][j] = 2;
  29. }
  30. }
  31. for (j = 1; j <= m; j++)
  32. {
  33. if ((a[n][j] & 2) != 0)
  34. {
  35. a[n + 1][j] = 8;
  36. }
  37. }
  38. for (i = 1; i <= n; i++)
  39. {
  40. if ((a[i][1] & 1) != 0)
  41. {
  42. a[i][0] = 4;
  43. }
  44. }
  45. for (i = 1; i <= n; i++)
  46. {
  47. if ((a[i][m] & 4) != 0)
  48. {
  49. a[i][m + 1] = 1;
  50. }
  51. }
  52. }
  53.  
  54. bool posibil(int i, int j)
  55. {
  56. return i >= 1 && i <= n && j <= m && j >= 1;
  57.  
  58. }
  59.  
  60. int FILL()
  61. {
  62. int nexti,nextj,cate=0;
  63. while(!q.empty())
  64. {
  65. int i=q.front().first;
  66. int j=q.front().second;
  67. q.pop();
  68.  
  69. if((bool)(a[i][j] & 1)==0 && posibil(i, j-1) && aux[i][j-1] == 0)
  70. {
  71. q.push({i, j-1});
  72. aux[i][j-1] = 1;
  73. }
  74. else if((bool)(a[i][j] & 1)==1)
  75. {
  76. cate++;
  77. }
  78. if((bool)(a[i][j] & 2)==0 && posibil(i+1, j) && aux[i+1][j] == 0)
  79. {
  80. q.push({i+1, j});
  81. aux[i+1][j] = 1;
  82.  
  83. }
  84. else if((bool)(a[i][j] & 2)==1)
  85. {
  86. cate++;
  87. }
  88.  
  89. if((bool)(a[i][j] & 4)==0 && posibil(i, j+1) && aux[i][j+1] == 0)
  90. {
  91. q.push({i, j+1});
  92. aux[i][j+1] = 1;
  93. }
  94. else if((bool)(a[i][j] & 4)==1)
  95. {
  96. cate++;
  97. }
  98.  
  99. if((bool)(a[i][j] & 8)==0 && posibil(i-1, j) && aux[i-1][j] == 0)
  100. {
  101. q.push({i-1, j});
  102. aux[i-1][j] = 1;
  103. }
  104. else if((bool)(a[i][j] & 8)==1)
  105. {
  106. cate++;
  107. }
  108. }
  109.  
  110. return cate;
  111. }
  112.  
  113. void algoritm()
  114. {
  115. fin>>n>>m;
  116. for(int i=1; i<=n; i++)
  117. {
  118. for(int j=1; j<=m; j++)
  119. {
  120. fin>>a[i][j];
  121. }
  122. }
  123. fin.close();
  124. gard();
  125.  
  126. for(int i=0; i<=n+1; i++)
  127. {
  128. q.push({i,0});
  129. q.push({i,m+1});
  130. aux[i][0] = 1;
  131. aux[i][m+1] = 1;
  132. }
  133.  
  134. for(int i=0; i<=m+1; i++)
  135. {
  136. q.push({n+1,i});
  137. q.push({0,i});
  138. aux[0][i] = 1;
  139. aux[n+1][i] = 1;
  140. }
  141.  
  142. int walls=FILL();
  143. fout << walls;
  144. int doors=0;
  145. }
  146.  
  147. void afisari()
  148. {
  149. for(int i=1; i<=n; i++)
  150. {
  151. for(int j=1; j<=m; j++)
  152. {
  153. fout<<aux[i][j]<<" ";
  154. }
  155. fout<<endl;
  156. }
  157. fout.close();
  158. }
  159.  
  160. int main()
  161. {
  162. algoritm();
  163. //afisari();
  164. return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement