|
楼主 |
发表于 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;
- }
复制代码 |
|