欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深搜

程序员文章站 2022-07-12 21:51:06
...

先看题

地质勘探公司负责探测地下油藏。GeoSurvComp一次只处理一个大的矩形区域,并创建一个网格,将土地划分为许多方形区域。然后分别分析每个地块,使用传感设备确定地块是否包含油。一块含油的地块叫做口袋。如果两个口袋相邻,那么它们是同一个油藏的一部分。石油储量可能非常大,可能包含许多口袋。你的工作是确定在一个电网中含有多少不同的油藏。

 输入              输入文件包含一个或多个网格。每个网格以一行开始,该行包含m和n,网格中的行和列的数量,由一个空格分隔。如果m=0,则表示输入结束;否则1<=m<=100和1<=n<=100。后面是n个字符的m行(不计算行尾字符)。每个字符对应一个情节,或者是“*”,表示没有油,或者是“@”,表示油袋。            

 输出             对于每个网格,输出不同的油藏数量。如果两个不同的油穴水平地、垂直地或对角地毗邻,它们就是同一油藏的一部分。一个油藏不会超过100个口袋。           

Sample Input

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5 
****@
*@@*@
*@**@
@@@*@
@@**@
0 0 

Sample Output

0
1
2
2
#include<stdio.h>
#include<string.h>
char a[133][122];
int n,m;
int c,d;
void dfs(int x,int y ){
	for(int i=-1;i<=1;i++){
		for(int j=-1;j<=1;j++){
			c=x+i;
			d=y+j;
			if(a[c][d]=='@'){
				a[c][d]='*';
				dfs(c,d);
			}
		}
	}
}
int main (){
	while(scanf("%d %d",&n,&m)!=EOF&&(n!=0&&m!=0)){
      int ans=0;
	   for(int i=0;i<n;i++){
       		scanf("%s",a[i]);
       	}
      for(int i=0;i<n;i++){
      	for(int j=0;j<m;j++){
      		if(a[i][j]=='@'){
      			ans++;
      			dfs(i,j);
      		}
      	}
      }
      printf("%d\n",ans);
	}
	return 0;
}