哥哥们求助
查看原帖
哥哥们求助
308657
xwzxwz321楼主2020/11/5 20:46
#include <iostream>  
#include <stack>
using namespace std;
typedef pair<int, int> P;
int n, m;
int sum;
char xq[501][501];
int vis[501][501];
int x[4] = { 1, -1, 0, 0 };
int y[4] = { 0, 0, -1, 1 };
void dfs(int i, int j) {
	stack<P> a;
	a.push(P(i, j));
	xq[i][j] = '1';
	while (!a.empty()) {
		P p = a.top();
		a.pop();
		xq[p.first][p.second] = '1';
		for (int ii = 0; ii < 4; ii++) {
			int xx = p.first + x[ii];
			int yy = p.second + y[ii];
			if (xx >= 0 && xx < n && yy >= 0 && yy < m && xq[xx][yy] == '0') {
				a.push(P(xx, yy));
			}
		}
	}
}
int main() {
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> xq[i][j];
		}
	}
	for (int i = 0; i < n; i++) {
		if (i == 0 || i == n - 1) {
			for (int j = 0; j < n; j++) {
				if (xq[i][j] == '0')
					dfs(i, j);
			}
		}
		else {
			if (xq[i][0] == '0')
				dfs(i, 0);
			if (xq[i][m - 1] == '0')
				dfs(i, m - 1);
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (xq[i][j] == '0') sum++;
		}
	}
	cout << sum << endl;
	return 0;
}





2020/11/5 20:46
加载中...