Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <bitset>
- #include <queue>
- #define MAX 104
- #define NS 0101
- #define EV 1010
- using namespace std;
- ifstream fin("pereti.in");
- ofstream fout("pereti.out");
- int n, m;
- int di[5]= {-1, 0, +1, 0};
- int dj[5]= {0, +1,0, -1};
- queue<pair<int, int> > q;
- int a[MAX][MAX];
- int aux[MAX][MAX];
- void gard()
- {
- int i, j;
- for (j = 1; j <= m; j++)
- {
- if ((a[1][j] & 8) != 0)
- {
- a[0][j] = 2;
- }
- }
- for (j = 1; j <= m; j++)
- {
- if ((a[n][j] & 2) != 0)
- {
- a[n + 1][j] = 8;
- }
- }
- for (i = 1; i <= n; i++)
- {
- if ((a[i][1] & 1) != 0)
- {
- a[i][0] = 4;
- }
- }
- for (i = 1; i <= n; i++)
- {
- if ((a[i][m] & 4) != 0)
- {
- a[i][m + 1] = 1;
- }
- }
- }
- bool posibil(int i, int j)
- {
- return i >= 1 && i <= n && j <= m && j >= 1;
- }
- int FILL()
- {
- int nexti,nextj,cate=0;
- while(!q.empty())
- {
- int i=q.front().first;
- int j=q.front().second;
- q.pop();
- if((bool)(a[i][j] & 1)==0 && posibil(i, j-1) && aux[i][j-1] == 0)
- {
- q.push({i, j-1});
- aux[i][j-1] = 1;
- }
- else if((bool)(a[i][j] & 1)==1)
- {
- cate++;
- }
- if((bool)(a[i][j] & 2)==0 && posibil(i+1, j) && aux[i+1][j] == 0)
- {
- q.push({i+1, j});
- aux[i+1][j] = 1;
- }
- else if((bool)(a[i][j] & 2)==1)
- {
- cate++;
- }
- if((bool)(a[i][j] & 4)==0 && posibil(i, j+1) && aux[i][j+1] == 0)
- {
- q.push({i, j+1});
- aux[i][j+1] = 1;
- }
- else if((bool)(a[i][j] & 4)==1)
- {
- cate++;
- }
- if((bool)(a[i][j] & 8)==0 && posibil(i-1, j) && aux[i-1][j] == 0)
- {
- q.push({i-1, j});
- aux[i-1][j] = 1;
- }
- else if((bool)(a[i][j] & 8)==1)
- {
- cate++;
- }
- }
- return cate;
- }
- void algoritm()
- {
- fin>>n>>m;
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- {
- fin>>a[i][j];
- }
- }
- fin.close();
- gard();
- for(int i=0; i<=n+1; i++)
- {
- q.push({i,0});
- q.push({i,m+1});
- aux[i][0] = 1;
- aux[i][m+1] = 1;
- }
- for(int i=0; i<=m+1; i++)
- {
- q.push({n+1,i});
- q.push({0,i});
- aux[0][i] = 1;
- aux[n+1][i] = 1;
- }
- int walls=FILL();
- fout << walls;
- int doors=0;
- }
- void afisari()
- {
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- {
- fout<<aux[i][j]<<" ";
- }
- fout<<endl;
- }
- fout.close();
- }
- int main()
- {
- algoritm();
- //afisari();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement