View Code of Problem 62

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

	int n, m;
	int sum;
	while (~scanf("%d%d", &m, &n)) {
		sum = 0;
		if (n == 0 && m == 0) {
			break;
		}
		for (int i = 1; i <= m; i++) {
			for (int j = 1; j <= n; j++) {
				scanf(" %c", &arr[i][j]);
				arr[i][j] = arr[i][j] - '0';
			}
		}
		for (int i = 1; i <= m; i++) {
			for (int j = 1; j <= n; j++) {
				if (arr[i][j] == 1) {
					dfs(i, j, m, n);
					sum++;
				}
			}
		}
		printf("%d\n", sum);
	}

	return 0;

}

Double click to view unformatted code.


Back to problem 62