Description
Farmer John purchased satellite photos of W x H pixels of his farm (1 <= W <= 80, 1 <= H <= 1000) and wishes to determine the largest ‘contiguous’ (connected) pasture. Pastures are contiguous when any pair of pixels in a pasture can be connected by traversing adjacent vertical or horizontal pixels that are part of the pasture. (It is easy to create pastures with very strange shapes, even circles that surround other circles.)
Each photo has been digitally enhanced to show pasture area as an asterisk (‘*’) and non-pasture area as a period (‘.’). Here is a 10 x 5 sample satellite photo:
..*.....**
.**..*****
.*...*....
..****.***
..****.***
This photo shows three contiguous pastures of 4, 16, and 6 pixels. Help FJ find the largest contiguous pasture in each of his satellite photos.
Input
Line 1: Two space-separated integers: W and H
Lines 2..H+1: Each line contains W “*” or “.” characters representing one raster line of a satellite photograph.
Output
- Line 1: The size of the largest contiguous field in the satellite photo.
Sample Input
10 5
..*.....**
.**..*****
.*...*....
..****.***
..****.***
Sample Output
16
Source
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define debug
#define Width_MAX 80
#define Height_MAX 100
int count_num = 0;
int Width,Height;
char map[Height_MAX+2][Width_MAX+2];
void dfs(int x, int y)
{
if(map[x][y] == '.' )
return;
map[x][y] = '.';
count_num ++;
dfs(x+1, y);
dfs(x-1, y);
dfs(x, y+1);
dfs(x, y-1);
}
int main()
{
int max = 0;
memset(map,'.',sizeof(map));
scanf("%d %d",&Width,&Height);
for(int i = 1; i <= Height; i++)
{
getchar();
for(int j = 1; j <= Width; j++)
{
scanf("%c",&map[i][j]);
}
}
#ifdef debug
printf("\n");
printf("\n");
for(int i = 1; i <= Height; i++)
{
for(int j = 1; j <= Width; j++)
{
printf("%c",map[i][j]);
}
printf("\n");
}
#endif // debug
for(int i = 1; i <= Height; i++)
{
for(int j = 1; j <= Width; j++)
{
count_num = 0;
if(map[i][j] == '*')
dfs(i,j);
if (max < count_num)
max = count_num;
}
}
printf("%d \n",max);
}
本博客介绍了一个算法,用于从卫星图片中找出最大连续牧场面积。通过数字化增强,将牧场标记为星号(*),非牧场区域标记为句点(.),并采用深度优先搜索(DFS)算法来确定连续牧场的像素数量。
593

被折叠的 条评论
为什么被折叠?



