深搜
程序员文章站
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;
}
上一篇: 深搜搜搜搜搜
下一篇: 4--炸弹人(深搜与广搜)