| 
 | 
 
 
 楼主 |
发表于 2018-2-17 15:55:14
|
显示全部楼层
 
 
 
千万不要随意复制粘贴自己写过的类似的代码行,一旦没有及时改正不同的地方,就容易出现难找的错误。 
 
 
- #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;        
 
 - }
 
  复制代码 |   
 
 
 
 |