View Code of Problem 62

#include <bits/stdc++.h>
using namespace std;
/*
1 0 1
1 0 1
1 0 1
*/
int a[125][125],v[125][125],sum=0;
int pos[8][2] = {{1,0},{1,1},{1,-1},{0,1},{0,-1},{-1,1},{-1,0},{-1,-1}};
int n,l;
string str;

int valid(int row,int col){
	if(row>=0&&row<n&&col>=0&&col<l)
		return 1;
	return 0;
}

void dfs(int i,int j) {
	v[i][j]=1;
	for(int k=0;k<8;k++){	
		if(a[i+pos[k][0]][j+pos[k][1]]==1&&valid(i+pos[k][0],j+pos[k][1])&&v[i+pos[k][0]][j+pos[k][1]]==0){
			//cout<<i+position[k][0]<<" :"<<j+position[k][1]<<endl;
			dfs(i+pos[k][0],j+pos[k][1]);
		}
	}
}

int main()
{
	while(cin>>n>>l) {
		if(n==0&& l==0)
			break;
			
		sum=0;
		
		for(int i=0;i<n;i++) {
			cin>>str;
			for(int j=0;j<l;j++) {
				v[i][j] = 0;
				a[i][j] = str[j]-'0';
			}
		}
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<l;j++) {
				if(a[i][j]&&v[i][j]==0) {
					sum++;
					dfs(i,j);
				}
			}
		}
		cout<<sum<<endl;
	
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 62