题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1241
/*简单DFS
题意:就相当于求连通分量的个数
*/
#include<iostream> #include<algorithm> using namespace std; #define maxn 101 char matrix[maxn][maxn]; bool visited[maxn][maxn]; int dir[][2] = {{0,-1},{1,0},{0,1},{-1,0},{-1,-1},{-1,1},{1,-1},{1,1}}; int m,n; bool ok(int i,int j) { return i >= 1 && i <= m && j >= 1 && j <= n && matrix[i][j] == '@'; } void dfs(int x,int y) { int p,q; for(int i = 0; i < 8; i++) { p = x + dir[i][0],q = y + dir[i][1]; if(ok(p,q) && !visited[p][q]) visited[p][q] = true,dfs(p,q); } } void solve() { int ans,num_size; num_size = 0,ans = 0; memset(visited,false,sizeof(visited)); for(int i = 1; i <= m; i++) for(int j = 1; j <= n; j++) { if(!visited[i][j] && matrix[i][j] == '@') ans++,visited[i][j] = true,dfs(i,j); } printf("%d\n",ans); } int main() { //freopen("1002.txt","r",stdin); while(scanf("%d%d",&m,&n) && (m||n)) { int i,j; for(i = 1; i <= m; i++) for(j = 1; j <= n; j++) cin >> matrix[i][j]; solve(); } return 0; }