Language: C++

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
typedef pair<int, int> P;
int compress(int *, int *, int);
void bfs(int, int);
int n, W, H;
int xa[1000], xb[1000], ya[1000], yb[1000]
bool pt[5000][5000] = {};
int main() {
	int w, h, ans = 0;
	while (cin >> w >> h&&w&&h) {
		cin >> n;
		memset(pt, 0, sizeof(pt));
		ans=0;
		for (int i = 0; i < n; i++) {
			scanf("%d%d%d%d", &xa[i], &ya[i], &xb[i], &yb[i]);
		}
		W = compress(xa, xb, w);
		H = compress(ya, yb, h);
		for (int i = 0; i < n; i++) {
			for (int j = xa[i]; j < xb[i]; j++) {
				for (int k = ya[i]; k < yb[i]; k++) {
					pt[k][j] = 1;
				}
			}
		}
		for (int i = 0; i < H; i++) {
			for (int j = 0; j < W; j++) {
				if (!pt[i][j]) {
					bfs(i, j);
					ans++;
				}
			}
		}
		cout << ans << endl;
	}
}

int compress(int *x1, int *x2, int lim) {
	vector<int> vec;
	for (int i = 0; i < n; i++) {
		for (int j = -1; j <= 1; j++) {
			int a = x1[i] + j, b = x2[i] + j;
			if (a >= 0 && a < lim) vec.push_back(a);
			if (b >= 0 && b < lim) vec.push_back(b);
		}
	}
	sort(vec.begin(), vec.end());
	vec.erase(unique(vec.begin(), vec.end()), vec.end());
	for (int i = 0; i < n; i++) {
		x1[i] = find(vec.begin(), vec.end(), x1[i]) - vec.begin();
		x2[i] = find(vec.begin(), vec.end(), x2[i]) - vec.begin();
	}
	return vec.size();
}

void bfs(int x, int y) {
	queue<P> que;
	que.push(P(x, y));
	while (!que.empty()) {
		P p = que.front();
		que.pop();
		for (int i = -1; i <= 1; i++) {
			if (i) {
				int a = p.first + i, b = p.second + i;
				if (a >= 0 && a < H && !pt[a][p.second]) {
					pt[a][p.second] = 1;
					que.push(P(a, p.second));
				}
				if (b >= 0 && b < W && !pt[p.first][b]) {
					pt[p.first][b] = 1;
					que.push(P(p.first, b));
				}
			}
		}
	}
}

Compiler output:
a.cc:13:1: error: expected initializer before 'bool'
   13 | bool pt[5000][5000] = {};
      | ^~~~
a.cc: In function 'int main()':
a.cc:18:24: error: 'pt' was not declared in this scope
   18 |                 memset(pt, 0, sizeof(pt));
      |                        ^~
a.cc:21:68: error: 'yb' was not declared in this scope; did you mean 'ya'?
   21 |                         scanf("%d%d%d%d", &xa[i], &ya[i], &xb[i], &yb[i]);
      |                                                                    ^~
      |                                                                    ya
a.cc:24:34: error: 'yb' was not declared in this scope; did you mean 'ya'?
   24 |                 H = compress(ya, yb, h);
      |                                  ^~
      |                                  ya
a.cc: In function 'void bfs(int, int)':
a.cc:71:57: error: 'pt' was not declared in this scope; did you mean 'p'?
   71 |                                 if (a >= 0 && a < H && !pt[a][p.second]) {
      |                                                         ^~
      |                                                         p
a.cc:75:57: error: 'pt' was not declared in this scope; did you mean 'p'?
   75 |                                 if (b >= 0 && b < W && !pt[p.first][b]) {
      |                                                         ^~
      |                                                         p