SuitNdtie

Dog village CC066

Apr 18th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<queue>
  3. using namespace std;
  4.  
  5. struct dog{
  6.     int I,J,Day;
  7. };
  8. bool InB(int I,int N){
  9.     return (1 <= I && I <= N);
  10. }
  11.  
  12. int main()
  13. {
  14.     int n,m;
  15.     scanf("%d %d",&n,&m);
  16.     int arr[n+1][m+1];
  17.     queue<dog> q;
  18.     for(int i=1;i<=n;i++){
  19.         for(int j=1;j<=m;j++){
  20.             scanf("%d",&arr[i][j]);
  21.             if(arr[i][j] == 0){
  22.                 q.push({i,j,0});
  23.             }
  24.         }
  25.     }
  26.     bool visited[n+1][m+1];for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)visited[i][j] = false;
  27.     int moveI[4] = {-1,0,1,0};
  28.     int moveJ[4] = {0,1,0,-1};
  29.    
  30.     int cnt = 0;
  31.     while(!q.empty()){
  32.         int uI = q.front().I;
  33.         int uJ = q.front().J;
  34.         int uDay = q.front().Day;
  35.         q.pop();
  36.         if(visited[uI][uJ])continue;
  37.         visited[uI][uJ] = true;
  38.         cnt++;
  39.         for(int i=0;i<4;i++){
  40.             int vI = uI + moveI[i];
  41.             int vJ = uJ + moveJ[i];
  42.             if(InB(vI,n) && InB(vJ,m) && arr[vI][vJ] > uDay + 1){
  43.                 q.push({vI,vJ,uDay + 1});
  44.             }
  45.         }
  46.     }
  47.     printf("%d",(n*m) - cnt);
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment