Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- vector<int> G[1000007];
- bool w[1000007];
- void DFS(int a){
- w[a] = 1;
- for(int i = 0;i < G[a].size();i++)
- if(!w[G[a][i]])
- DFS(G[a][i]);
- }
- int main(){
- int n, m, s = 0;
- cin >> n >> m;
- string t[n + 2];
- t[0] = t[n + 1] = "";
- for(int i = 0;i < m;i++){
- t[0] += "0";
- t[n + 1] += "0";
- }
- for(int i = 1;i <= n;i++)
- cin >> t[i];
- for(int i = 0;i < n + 2;i++)
- t[i] = "0" + t[i] + "0";
- for(int i = 1;i <= n;i++)
- for(int j = 1;j <= m;j++)
- if(t[i][j] == '1'){
- if(t[i - 1][j] == '1')// o 1 w górę
- G[j + (i-1)*m].push_back( (i-2) * m + j );
- if(t[i + 1][j] == '1')//o 1 w dół
- G[j + (i-1)*m].push_back( (i) * m + j );
- if(t[i][j-1] == '1')// o 1 w lewo
- G[j + (i-1)*m].push_back( (i-1) * m + j - 1 );
- if(t[i][j+1] == '1') // o 1 w prawo
- G[j + (i-1)*m].push_back( (i-1) *m + j + 1 );
- }
- for(int i = 1;i <= n;i++)
- for(int j = 1;j <= m;j++)
- if(!w[j + (i-1)*m] && t[i][j] == '1'){
- DFS(j + (i-1)*m);
- s++;
- }
- cout << s;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement