#include <iostream>
int count_regions( int *arr, int rows, int cols ) {
int region_count = 0;
for ( int first_index = 0; first_index != rows * cols; ++ first_index ) {
if ( arr[ first_index ] == 0 ) continue;
++ region_count;
int first_row = first_index / cols, first_col = first_index % cols;
int last_col;
for ( last_col = first_col;
last_col != cols && arr[ first_row * cols + last_col ] != 0;
++ last_col ) ;
for ( int last_row = first_row;
last_row != rows && arr[ last_row * cols + first_col ] != 0;
++ last_row ) {
for ( int col = first_col; col != last_col; ++ col ) {
arr[ last_row * cols + col ] = 0;
}
}
}
return region_count;
}
int main() {
int arr[] = {
1, 1, 1, 0, 3, 3, 3, 0, 2, 2,
1, 1, 1, 0, 3, 3, 3, 0, 2, 2,
0, 0, 0, 0, 3, 3, 3, 0, 0, 0,
2, 2, 0, 0, 3, 3, 3, 0, 4, 4,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 0, 4, 4, 4, 0
};
std::cout << count_regions( arr, 6, 10 ) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IGNvdW50X3JlZ2lvbnMoIGludCAqYXJyLCBpbnQgcm93cywgaW50IGNvbHMgKSB7CiAgICBpbnQgcmVnaW9uX2NvdW50ID0gMDsKCiAgICBmb3IgKCBpbnQgZmlyc3RfaW5kZXggPSAwOyBmaXJzdF9pbmRleCAhPSByb3dzICogY29sczsgKysgZmlyc3RfaW5kZXggKSB7CiAgICAgICAgaWYgKCBhcnJbIGZpcnN0X2luZGV4IF0gPT0gMCApIGNvbnRpbnVlOwoKICAgICAgICArKyByZWdpb25fY291bnQ7CgogICAgICAgIGludCBmaXJzdF9yb3cgPSBmaXJzdF9pbmRleCAvIGNvbHMsIGZpcnN0X2NvbCA9IGZpcnN0X2luZGV4ICUgY29sczsKICAgICAgICBpbnQgbGFzdF9jb2w7CiAgICAgICAgZm9yICggbGFzdF9jb2wgPSBmaXJzdF9jb2w7CiAgICAgICAgICAgICAgbGFzdF9jb2wgIT0gY29scyAmJiBhcnJbIGZpcnN0X3JvdyAqIGNvbHMgKyBsYXN0X2NvbCBdICE9IDA7CiAgICAgICAgICAgICAgKysgbGFzdF9jb2wgKSA7CgogICAgICAgIGZvciAoIGludCBsYXN0X3JvdyA9IGZpcnN0X3JvdzsgCiAgICAgICAgICAgICAgbGFzdF9yb3cgIT0gcm93cyAmJiBhcnJbIGxhc3Rfcm93ICogY29scyArIGZpcnN0X2NvbCBdICE9IDA7CiAgICAgICAgICAgICAgKysgbGFzdF9yb3cgKSB7CiAgICAgICAgICAgIGZvciAoIGludCBjb2wgPSBmaXJzdF9jb2w7IGNvbCAhPSBsYXN0X2NvbDsgKysgY29sICkgewogICAgICAgICAgICAgICAgYXJyWyBsYXN0X3JvdyAqIGNvbHMgKyBjb2wgXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVnaW9uX2NvdW50Owp9CgppbnQgbWFpbigpIHsKICAgIGludCBhcnJbXSA9IHsKMSwgMSwgMSwgMCwgMywgMywgMywgMCwgMiwgMiwKMSwgMSwgMSwgMCwgMywgMywgMywgMCwgMiwgMiwKMCwgMCwgMCwgMCwgMywgMywgMywgMCwgMCwgMCwKMiwgMiwgMCwgMCwgMywgMywgMywgMCwgNCwgNCwKMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKMSwgMSwgMSwgMSwgMSwgMCwgNCwgNCwgNCwgMAogICAgfTsKICAgIAogICAgc3RkOjpjb3V0IDw8IGNvdW50X3JlZ2lvbnMoIGFyciwgNiwgMTAgKSA8PCAnXG4nOwp9