油田问题
题目
The
GeoSurvComp geologic survey company is responsible for detecting
underground oil deposits. GeoSurvComp works with one large
rectangular region of land at a time, and creates a grid that
divides the land into numerous square plots. It then analyzes each
plot separately, using sensing equipment to determine whether or
not the plot contains oil. A plot containing oil is called a
pocket. If two pockets are adjacent, then they are part of the same
oil deposit. Oil deposits can be quite large and may contain
numerous pockets. Your job is to determine how many different oil
deposits are contained in a grid.
(即搜索一个字符型数组里‘@’的个数,其中上下左右及对角线相连接的‘@’视为一个,最后输出个数)
Input
The input file contains one or more grids. Each grid begins
with a line containing m and n, the number of rows and columns in
the grid, separated by a single space. If m = 0 it signals the end
of the input; otherwise 1 <= m <= 100
and 1 <= n <= 100. Following this are
m lines of n characters each (not counting the end-of-line
characters). Each character corresponds to one plot, and is either
`*', representing the absence of oil, or `@', representing an oil
pocket.
(有多组输入,m行n列,输入0 0也视为输入结束,‘@‘表示油田)
Output
For each grid, output the number of distinct oil deposits. Two
different pockets are part of the same oil deposit if they are
adjacent horizontally, vertically, or diagonally. An oil deposit
will not contain more than 100 pockets.
(输出油田个数,每个输出占一行)
Sample
Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample
Output
0
1
2
2
————————————————————————————————————
# include
char
bin[105][105];
int
fx[3]={0,-1,1},fy[3]={-1,1,0};//作为方向使用;
void dfs(int
x,int y)
{
int
i,j,tx,ty;
bin[x][y]='*';
//将相连接的@全部改为*,便于下次搜索;
for(i=0;i<
se-mark="1">3;i++){
tx=x+fx[i];
for(j=0;j<
se-mark="1">3;j++){
ty=y+fy[j];
if(bin[tx][ty]=='@'){
dfs(tx,ty);
} //搜索@周围是否也有@;
}
}
}
int
main()
{
int
m,n,i,j,count=0;
while(scanf("%d
%d",&m,&n)!=EOF&&n!=0&&m!=0)
{
for(i=0;iscanf("%s",bin[i]);
}
for(i=0;i
for(j=0;j
if(bin[i][j]=='@'){
dfs(i,j);
count++;
}
}
}
printf("%d\n",count);
count=0;
}
return
0;
}