View Code of Problem 62

#include<bits/stdc++.h>
using namespace std;
int mp[125][125];
void dfs(int i, int j, int n, int m) {
	if (i > n || j > m || i < 1 || j < 1)
		return;
	if (!mp[i][j])
		return;
	if (mp[i][j]) {
		mp[i][j] = 0;
		dfs(i - 1, j, n, m);
		dfs(i - 1, j + 1, n, m);
		dfs(i - 1, j - 1, n, m);
		dfs(i, j + 1, n, m);
		dfs(i, j - 1, n, m);
		dfs(i + 1, j, n, m);
		dfs(i + 1, j + 1, n, m);
		dfs(i + 1, j - 1, n, m);
		return;
	}
}
int main() {
	int n, m;
	while (cin >> n >> m) {
		if (!n && !m)
			break;

		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= m; j++)
				scanf("%1d", &mp[i][j]);

		int cnt = 0;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				if (mp[i][j]) {
					dfs(i, j, n, m);
					cnt++;
				}
			}
		}
		cout << cnt << endl;
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 62