只是练练手!
#include "stdio.h" #include "string.h" char map[105][105]; int m,n; int dis[8][2]={{1,-1,},{1,0},{1,1},{0,-1},{0,1},{-1,-1},{-1,0},{-1,1}}; void DFS(int x,int y); int main() { int i,j,sum; while(scanf("%d%d",&m,&n),m+n) { sum=0; getchar(); for(i=0;i<m;i++) scanf("%s",map[i]); for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(map[i][j]=='@') { sum++; map[i][j]='*'; //对入口进行处理 DFS(i,j); } } } printf("%d ",sum); } return 0; } void DFS(int x,int y) { int i,a,b; for(i=0;i<8;i++)//八个不同的方向 { a=x+dis[i][0]; b=y+dis[i][1]; if(a<0 || a>=m || b<0 || b>=n || map[a][b]=='*') continue; map[a][b]='*'; //(进入前先对原入口进行处理) DFS(a,b);//符合条件则进入下一层, } }