水题
//11237724 c00h00g 1562 Accepted 440K 0MS G++ 925B 2013-02-05 00:00:27 //一开始使用gets读的,不知道怎么滤过第一个回车,改成scanf就对了 #include<stdio.h> #include<stdlib.h> #include<string.h> char mat[105][105]; int vis[105][105]; int n,m; int dir[8][2]={{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1}}; void dfs(int x,int y){ if(mat[x][y]=='@'&&vis[x][y]==0){ vis[x][y]=1; for(int i=0;i<8;i++){ int a=x+dir[i][0]; int b=y+dir[i][1]; if(a>=0&&a<m&&b>=0&&b<n&&vis[a][b]==0&&mat[a][b]=='@') dfs(a,b); } } } int main(){ while(scanf("%d%d",&m,&n)!=EOF){ if(m==0) break; for(int i=0;i<m;i++) scanf("%s",mat[i]); memset(vis,0,sizeof(vis)); int res=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(vis[i][j]==0&&mat[i][j]=='@'){ dfs(i,j); res++; } printf("%d\n",res); } return 0; }