千万不要随意复制粘贴自己写过的类似的代码行,一旦没有及时改正不同的地方,就容易出现难找的错误。
#include<cstdio>
#define N 101
char maze[N][N];
bool mark[N][N];
int n,m;
int go[][2]={1,0,-1,0,0,1,0,-1,1,1,1,-1,-1,-1,-1,1};
void DFS(int x,int y)
{
for(int i=0;i<8;i++)
{
int nx=x+go[i][0];
int ny=y+go[i][1];
if(nx<1 || nx>n || ny<1 || ny>m)
continue;
if(maze[nx][ny]=='*')
continue;
if(mark[nx][ny]==true)
continue;
mark[nx][ny]=true;
DFS(nx,ny);
}
return ;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(int i=1;i<=n;i++)
scanf("%s",maze[i]+1); //maze[i]+1本身就是地址,无须&来取地址。maze[i]的地址为maze[i][0],maze[i]+1为maze[i][1]
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
mark[i][j]=false;
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(mark[i][j]==true)
continue;
if(maze[i][j]=='*')
continue;
DFS(i,j);
ans++;
}
printf("%d\n",ans);
}
return 0;
}
|