从四周开始水漫,为何爆零???向大佬求助
查看原帖
从四周开始水漫,为何爆零???向大佬求助
357981
xdwang楼主2020/8/26 20:40
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<iostream>
using namespace std;
int c, r;
char a[501][501];
int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };
int cnt = 0;
int vi[501][501];//记录是否访问
bool Isnum(int i, int j) {
	if (vi[i][j] == 1)return false;
	if (a[i][j] == '0')return true;
	return false;
}
//这应该水漫法啊
void dfs(int i, int j) {
	vi[i][j] = 1;//记录
	for (int x = 0; x < 4; x++) {
		int ty = i + dx[x];
		int tx = j + dy[x];
		if (tx >= 0 && tx < c && ty >= 0 && ty < r) {
			if (Isnum(ty, tx)) {
				dfs(ty, tx);
			}
		}
	}
}
int main() {
	cin>>r>>c;
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cin >> a[i][j];//字符矩阵
		}
	}
	//搜索四周
	for (int i = 0; i < r; i++) {
		if (Isnum(i, 0)) {
			dfs(i, 0);
		}
		if (Isnum(i, c-1)) {
			dfs(i, 0);
		}
	}
	for (int i = 0; i < c; i++) {
		if (Isnum(0, i)) {
			dfs(0, i);
		}
		if (Isnum(r-1, i)) {
			dfs(r-1, i);
		}
	}
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			//如果剩余没访问的0就是结果
			if (a[i][j] == '0'&&vi[i][j]==0)cnt++;
		}
	}
	printf("%d\n", cnt);
	return 0;
}

过了两个样例,但是第一个测试点数据跑一遍结果就是不对的,想不通哪里出问题了???

2020/8/26 20:40
加载中...