一道简单的搜索题,本题我用的是广搜写的,深搜当然也可以...
#include <iostream> #include <queue> #include<string.h> using namespace std; int m,n; char map[105][105]; int dir[][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}}; struct st { int x,y; st(int m=0,int n=0) { x=m;y=n; } }; void bfs(int x,int y) { queue<st> Q; st fir; Q.push(st(x,y)); map[x][y]='*'; while(!Q.empty()) { fir=Q.front(); for(int i=0;i<8;i++) { int tx=fir.x+dir[i][0],ty=fir.y+dir[i][1]; if(map[tx][ty]=='@') { Q.push(st(tx,ty)); map[tx][ty]='*'; } } Q.pop(); } } int main() { while(scanf("%d%d",&n,&m)&&(n||m)) { int num=0; memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) scanf("%s",map[i]+1); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(map[i][j]=='@') { num++; bfs(i,j); } } printf("%d\n",num); } }