题目大意:寻找连通分量的个数。完全dfs模板,注意是八个方向的搜索。
代码如下:
#include<iostream> #include<stdio.h> #include<string> #include<string.h> #define N 105 using namespace std; char grid[N][N]; int m,n; int direct[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}}; void DFS(int x,int y) { int xx,yy,i; grid[x][y]='*'; for(i=0;i<8;i++) { xx=x+direct[i][0]; yy=y+direct[i][1]; if(xx<0||xx>=m||yy<0||yy>=n) continue; if(grid[xx][yy] == '@') { DFS(xx,yy); } } } int main() { int i,j,count; while(scanf("%d%d",&m,&n)!= EOF && m!=0 ) { count=0; for( i=0;i<m;i++) scanf("%s",grid[i]); for(i=0;i<m;i++) for(j=0;j<n;j++) { if(grid[i][j] == '@') { DFS(i,j); count++; } } cout<<count<<endl; } return 0 ; }