正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 提高 2013 第一轮真题 › 第 26 题

NOIP 提高 2013 第一轮 第 26 题:DFS 求最大四连通块大小

阅读程序 · 搜索与图遍历(DFS/BFS) · 答案 7

题目

```
#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号