首页 > 试题广场 >

请阅读以下代码和输入,写出程序的输出结果。 代码:

[填空题]
请阅读以下代码和输入,写出程序的输出结果。
代码:
#include<iostream>
#include<string>
using namespace std;

const int MAX_SIZE = 1000;
int n, m, k;
int a[MAX_SIZE][MAX_SIZE];
int sum;

void dfs(int  x,  int  y) {
	++sum;
	a[x][y] = 1;
	if ((x > 1) && (a[x-1][y] == 0)) dfs(x - 1, y);
	if ((y > 1) && (a[x][y-1] == 0)) dfs(x, y - 1);
	if ((x < n) && (a[x+1][y] == 0)) dfs(x + 1, y);
	if ((y < m) && (a[x][y+1] == 0)) dfs(x, y + 1);
}


int main( ) {
	memset(a, 0, sizeof(a));
	cin >> n >> m >> k;
	for(int i = 1; i <= k; ++i) {
		int x, y;
		cin >> x >> y;
		a[x][y] = 1;
	}
	int ans = 0, ansp = 0;
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			if (a[i][j] == 0) {
				++ansp;
				sum = 0;
				dfs(i, j);
				if (ans < sum) ans = sum;
			}
	cout << ans << " " << ansp << endl;
	return  0;
}

输入:

10 10 10

4 1

5 2

6 3

7 2

8 1

1 7

2 7

3 8

4 9

5 10

输出:1
这段程序要解决的是一个图像问题。有一张黑白图片(每个像素要么是黑色0,要么是白色1),问这张照片上有多少个黑***域?最大的黑***域包含多少个点?
发表于 2018-08-16 17:58:29 回复(0)
意为,寻找不为1 的节点数,上下左右可以深搜,标记为1 一共标记三次,ansp = 3 ans = 100 - 10 - 13 = 77
发表于 2020-02-28 15:13:41 回复(0)
应该是类似于岛屿问题,1为陆地,包围住0就算一个岛,一共两个岛,分别求岛的面积
发表于 2019-09-01 00:22:42 回复(0)
是不是少了个头文件?
发表于 2018-09-22 16:16:06 回复(1)