/*problem:poj1562
*author:gubojun
*time:2012.7.27
*language:C
*题目大意:求有多少个不相连的区域代码中的解释很多了,别的不说了
*/
#include<stdio.h>
#include<string.h>
#define N 101
char map[N][N];
int n,m,sum;
void dfs(int i,int j)
{
//如果 map[i][j]='@'或超出范围,返回
if(map[i][j]!='@'||i<0||j<0||i>=m||j>=n) return;
else
{
map[i][j]='*';
//调用递归把与'@'相连的'@'都变成'*'
dfs(i-1,j-1);
dfs(i-1,j);
dfs(i-1,j+1);
dfs(i,j-1);
dfs(i,j+1);
dfs(i+1,j-1);
dfs(i+1,j);
dfs(i+1,j+1);
}
}
int main()
{
int i,j;
freopen("in.txt","r",stdin);
while(scanf("%d%d",&m,&n)!=EOF)//输入图形有多少行多少列—m行n列
{
if(m==0) break;//如果m==0就退出
sum=0;//初始化sum
for(i=0;i<m;i++)
scanf("%s",map[i]);//输入图形
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='@')//判断map中是否有'@'
{
dfs(i,j);//避免重复统计
sum++;
}
}
}
printf("%d\n",sum);//输入结果
}
return 0;
}
标签:北大,map,int,sum,dfs,poj1562,ACM,include
From: https://blog.51cto.com/u_10101161/7177263