Advertisement
lucacodorean

Untitled

Jan 24th, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 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.     if((i>0 && i<=n+1) && (j>0 && j<=m+1))
  57.     {
  58.         return true;
  59.     }
  60.     return false;
  61. }
  62.  
  63. int FILL()
  64. {
  65.     int nexti,nextj,cate=0;
  66.     while(!q.empty())
  67.     {
  68.         int i=q.front().first;
  69.         int j=q.front().second;
  70.         q.pop();
  71.         for(int k=0; k<4; k++)
  72.         {
  73.             nexti=i+di[k];
  74.             nextj=j+dj[k];
  75.             if(posibil(nexti,nextj)==true && aux[nexti][nextj]==0 && (!(a[nexti][nextj] & NS) || !(a[nexti][nextj] & EV)))
  76.             {
  77.                 aux[nexti][nextj]+=1;
  78.                 q.push({nexti,nextj});
  79.                 cate+=1;
  80.             }
  81.         }
  82.         q.pop();
  83.     }
  84.     return cate;
  85. }
  86.  
  87. void algoritm()
  88. {
  89.     fin>>n>>m;
  90.     for(int i=1; i<=n; i++)
  91.     {
  92.         for(int j=1; j<=m; j++)
  93.         {
  94.             fin>>a[i][j];
  95.         }
  96.     }
  97.     fin.close();
  98.     gard();
  99.  
  100.     for(int i=0; i<=n+1; i++)
  101.     {
  102.         if(a[0][i]==0)
  103.         {
  104.             q.push({0,i});
  105.         }
  106.         if(a[i][0]==0)
  107.         {
  108.             q.push({i,0});
  109.         }
  110.     }
  111.  
  112.     for(int i=0; i<=n+1; i++)
  113.     {
  114.         if(a[n+i][i]==0)
  115.         {
  116.             q.push({n+1,i});
  117.         }
  118.         if(a[i][m+1]==0)
  119.         {
  120.             q.push({i,m+1});
  121.         }
  122.     }
  123.  
  124.     int walls=FILL();
  125.     int doors=0;
  126. }
  127.  
  128. void afisari()
  129. {
  130.     for(int i=1; i<=n; i++)
  131.     {
  132.         for(int j=1; j<=m; j++)
  133.         {
  134.             fout<<aux[i][j]<<" ";
  135.         }
  136.         fout<<endl;
  137.     }
  138.     fout.close();
  139. }
  140.  
  141. int main()
  142. {
  143.     algoritm();
  144.     afisari();
  145.     return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement