View Code of Problem 62

#include<iostream>
#include<vector>
using namespace std;

void dfs(vector<vector<char>>& s,int i,int j)
{
	s[i][j] = '0';
	int n = s.size(), m = s[0].size();
	if(i-1>=0) 
	{
		if(j-1>=0 && s[i-1][j-1] == '1') dfs(s,i-1,j-1);
		if(j+1 < m && s[i-1][j+1] == '1') dfs(s,i-1,j+1);
		if(s[i-1][j] == '1') dfs(s,i-1,j);
	}
	if(i+1 < n)
	{
		if(j-1>=0 && s[i+1][j-1] == '1') dfs(s,i+1,j-1);
		if(j+1 < m && s[i+1][j+1] == '1') dfs(s,i+1,j+1);
		if(s[i+1][j] == '1') dfs(s,i+1,j);
	} 
	if(j-1>=0 && s[i][j-1] == '1') dfs(s,i,j-1);
	if(j+1 <= m && s[i][j+1] == '1') dfs(s,i,j+1);
} 
int main()
{
	int n, m;
	while(cin >> n >> m)
	{
		if(n == 0 && m == 0) break;
		vector<vector<char>> s(n, vector<char>(m));
		for(int i = 0;i < n;i ++)
		{
			for(int j = 0;j < m;j ++)
			{
				cin >> s[i][j];
			}
		}
		int num = 0;
		for(int i = 0;i < n;i ++)
		{
			for(int j = 0;j < m;j ++)
			{
				if(s[i][j] == '1')
				{
					num ++;
					dfs(s,i,j);
				}
			}
		}
		cout << num << endl;
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 62