正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2013 第一轮真题 › 第 26 题
NOIP 提高 2013 第一轮 第 26 题:DFS 求最大四连通块大小
题目
```
#include <stdio.h>
#include <string.h>
#define SIZE 100
int n, m, p, count;
int a[SIZE][SIZE];
void colour(int x, int y)
{
count++;
a[x][y] = 1;
if ((x > 1) && (a[x - 1][y] == 0))
colour(x - 1, y);
if ((y > 1) && (a[x][y - 1] == 0))
colour(x, y - 1);
if ((x < n) && (a[x + 1][y] == 0))
colour(x + 1, y);
if ((y < m) && (a[x][y + 1] == 0))
colour(x, y + 1);
}
int main()
{
int i, j, x, y, ans;
memset(a, 0, sizeof(a));
scanf("%d%d%d", &n, &m, &p);
for (i = 1; i <= p; i++) {
scanf("%d%d", &x, &y);
a[x][y] = 1;
}
ans = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (a[i][j] == 0) {
count = 0;
colour(i, j);
if (ans < count)
ans = count;
}
printf("%d\n", ans);
return 0;
}
```
输入:
6 5 9
1 4
2 3
2 4
3 2
4 1
4 3
4 5
5 4
6 4
输出:_________本小题
请写出程序的输出结果。
答案
7
题解
考点定位
本题考「DFS 连通块模拟」,对应大纲 4.3.3 搜索(难度【3】)。
解题过程
colour(x,y) 四连通染色,主程序对每个未染点统计连通块大小,ans 取最大。按原卷 6×5 网格与 9 个障碍点模拟:最大空连块 = 7。
答案:7。
易错提醒
① count 在进入 colour 前清零、每染一点 count++;② 求最大连通块(不是块数)。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号