Advertisement
Guest User

stasiu

a guest
Sep 21st, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int> G[1000007];
  4. bool w[1000007];
  5. void DFS(int a){
  6.   w[a] = 1;
  7.   for(int i = 0;i < G[a].size();i++)
  8.     if(!w[G[a][i]])
  9.       DFS(G[a][i]);
  10. }
  11. int main(){
  12.   int n, m, s = 0;
  13.   cin >> n >> m;
  14.   string t[n + 2];
  15.   t[0] = t[n + 1] = "";
  16.   for(int i = 0;i < m;i++){
  17.     t[0] += "0";
  18.     t[n + 1] += "0";
  19.   }
  20.   for(int i = 1;i <= n;i++)
  21.     cin >> t[i];
  22.   for(int i = 0;i < n + 2;i++)
  23.     t[i] = "0" + t[i] + "0";
  24.  
  25.   for(int i = 1;i <= n;i++)
  26.     for(int j = 1;j <= m;j++)
  27.  
  28.       if(t[i][j] == '1'){
  29.  
  30.         if(t[i - 1][j] == '1')// o 1 w górę
  31.           G[j + (i-1)*m].push_back( (i-2) * m + j );
  32.  
  33.         if(t[i + 1][j] == '1')//o 1 w dół
  34.           G[j + (i-1)*m].push_back( (i) * m + j );
  35.  
  36.         if(t[i][j-1] == '1')// o 1 w lewo
  37.           G[j + (i-1)*m].push_back( (i-1) * m + j - 1 );
  38.  
  39.         if(t[i][j+1] == '1') // o 1 w prawo
  40.           G[j + (i-1)*m].push_back( (i-1) *m  + j + 1 );
  41.  
  42.       }
  43.  
  44.   for(int i = 1;i <= n;i++)
  45.     for(int j = 1;j <= m;j++)
  46.       if(!w[j + (i-1)*m] && t[i][j] == '1'){
  47.         DFS(j + (i-1)*m);
  48.         s++;
  49.       }
  50.  
  51.   cout << s;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement