岛屿面积有多大(dfs算法)

来源:互联网 发布:安徽大学人工智能 编辑:程序博客网 时间:2024/04/30 08:47

题目描述

若海域由一个主岛和一些附属岛屿组成,海域可由一个n×n的方阵表示,矩阵中的数字表示相应主岛或岛屿的海拔:数字19表示陆地,数字0表示海洋。

现在A君打算在某个岛屿或主岛上探险,他的飞机将会降落在海域坐标为(x, y)的陆地上,请你计算A君降落点所在岛屿或主岛的面积有多大,此处将面积定义为满足4连通的格子有多少个,4连通即为将与A君降落点上下左右相邻接的陆地均视为同一岛屿或主岛。

输入

输入一行包含3个整型数据,第一个用于表示海域的总面积,即nn列(1<=n<=30)的方形区域;后两个用于表示A君的降落点坐标xy1<=x, y <=n)。

输出

A君降落点所在岛屿或主岛的面积。

样例输入

3 1 1

1 1 0

2 1 0

0 0 0

5 2 4

0 1 1 5 0

2 2 3 1 1

2 0 0 2 0

0 1 3 1 0

 1 0 1 0 0

10 6 8

1 2 1 0 0 0 0 0 2 3

3 0 2 0 1 2 1 0 1 2

4 0 1 0 1 2 3 2 0 1

3 2 0 0 0 1 2 4 0 0

0 0 0 0 0 0 1 5 3 0

0 1 2 1 0 1 5 4 3 0

0 1 2 3 1 3 6 2 1 0

0 0 3 4 8 9 7 5 0 0

0 0 0 3 7 8 6 0 1 2

0 0 0 0 0 0 0 0 1 0

 

 

 

样例输出

4 14 38

#include <stdio.h>#include <string.h>int map[100][100];int dfs(int x, int y) {int sum = 0;if(map[x][y] == 0) {//printf("%d",sum);return sum;}else {sum++;map[x][y] = 0;sum += dfs(x, y+1);sum += dfs(x, y-1);sum += dfs(x+1, y);sum += dfs(x-1, y);}return sum;}int main() {int n, x, y, m, l;while (scanf("%d %d %d", &l, &x, &y) != EOF) {memset(map, 0, sizeof(map));for(m = 1; m <= l; m++) {for(n = 1; n <= l; n++) {scanf("%d", &map[m][n]);}}printf("%d\n", dfs(x,y));}return 0; } 

0 0
原创粉丝点击