【题目大意】输入多个m行n列的矩阵,用00表示输入结束。找出有多少块石油区域,用“@”代表石油,假如两个“@”在横,竖或对角线上相邻,就说它们位于同一区域,对于每个输入,输出一个数表示有几个石油区域。
输入样例#1:
1 1 //行 列
* /字符
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0 //到0 0 结束
输出样例#1:
0
1
2
2
在
#include <stdio.h>
#define maxn 10001
char maze[maxn][maxn];
int a[maxn][maxn];
int n,m;
void dfs(int x,int y)
{
if(x<0||x>=n||y<0||y>m)return ;
if(a[x][y]!=0||maze[x][y]!='@')return ;
maze[x][y]='*';
for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
{
dfs(x+i,y+j);
}
}
int main()
{
while(scanf("%d %d",&n,&m)==2&&n&&m)
{
for(int i=0;i<n;i++)
scanf("%s",&maze[i]);
memset(a,0,sizeof(a));
int count=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(maze[i][j]=='@')
{
dfs(i,j);
count++;
}
}
printf("%d\n",count);
}
}