| 戴哥哥講了很久的一道題,後續題的基礎 #include <iostream> #include <queue> using namespace std; struct node { int x,y; }; int w,h,sx,sy,sum; int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; char map[25][25]; void BFS() { queue<node> q; node n,p; n.x = sx; n.y = sy; q.push(n); map[sx][sy] = '#'; while(!q.empty()) { n = q.front(); q.pop(); //sum++; for(int i = 0;i < 4;i++) { int tx = n.x + dir[i][0]; int ty = n.y + dir[i][1]; //if(tx < 0 || tx >= w || ty < 0 || ty >= h) //continue; //if(map[tx][ty] == '#') //continue; if(tx >= 0 && tx < h && ty >= 0 && ty < w && map[tx][ty] == '.') { sum++; p.x = tx; p.y = ty; q.push(p); map[tx][ty] = '#'; } } } } int main() { int i,j; //freopen("1.txt","r",stdin); while(scanf("%d %d",&w,&h) == 2) { if(w == 0 && h == 0) break; for(i = 0;i < h;i++) for(j = 0;j < w;j++) { cin >> map[i][j]; if(map[i][j] == '@') { sx = i; sy = j; } } sum = 1; BFS(); printf("%d/n",sum); } return 0; } |