View Code of Problem 62

#include<iostream>
#include<stdio.h>
#include<string>
#include<cstring>
#include<string.h>
#include<algorithm>
using namespace std;

void fun(string s[],int a[][120],int n,int k,int i,int j) {
	a[i][j] = 1;
	if (i - 1 >= 0 && s[i - 1][j] == '1' && !a[i - 1][j]) {
		fun(s, a, n, k, i - 1, j);
	}
	if (i + 1 < n&&s[i + 1][j] == '1' && !a[i + 1][j]) {
		fun(s, a, n, k, i + 1, j);
	}
	if (j - 1 >= 0 && s[i][j - 1] == '1' && !a[i][j - 1]) {
		fun(s, a, n, k, i, j - 1);
	}
	if (j + 1 < k&&s[i][j + 1] == '1' && !a[i][j + 1]) {
		fun(s, a, n, k, i, j + 1);
	}
	if (i - 1 >= 0 && j - 1 >= 0 && s[i - 1][j - 1] == '1' && !a[i - 1][j - 1]) {
		fun(s, a, n, k, i - 1, j - 1);
	}
	if (i - 1 >= 0 && j + 1 < k && s[i - 1][j + 1] == '1' && !a[i - 1][j + 1]) {
		fun(s, a, n, k, i - 1, j + 1);
	}
	if (i + 1 < n && j - 1 >= 0 && s[i + 1][j - 1] == '1' && !a[i + 1][j - 1]) {
		fun(s, a, n, k, i + 1, j - 1);
	}
	if (i + 1 < n && j + 1 < k && s[i + 1][j + 1] == '1' && !a[i + 1][j + 1]) {
		fun(s, a, n, k, i + 1, j + 1);
	}
}

int main() {
	int n, k;
	while (cin >> n >> k) {
		if (n == 0 && k == 0) {
			break;
		}
		string s[120];
		int a[120][120] = {0};
		int count = 0;
		for (int i = 0;i < n;i++) {
			cin >> s[i];
		}
		for (int i = 0;i < n;i++) {
			for (int j = 0;j < k;j++) {
				if (s[i][j]=='1'&&!a[i][j]) {
					fun(s, a, n, k, i, j);
					count++;
				}
			}
		}
		cout << count << endl;
	}
}

Double click to view unformatted code.


Back to problem 62