简单DFS #include <iostream> using namespace std; char map[22][22]; bool memo[22][22]; int num=1,col,row; void DFS(int r,int c){ if(r>0&&map[r-1][c]=='.'&&memo[r-1][c]==false){ ++num; memo[r-1][c]=true; DFS(r-1,c); } if(c>0&&map[r][c-1]=='.'&&memo[r][c-1]==false){ ++num; memo[r][c-1]=true; DFS(r,c-1); } if(r<row-1&&map[r+1][c]=='.'&& memo[r+1][c]==false){ ++num; memo[r+1][c]=true; DFS(r+1,c); } if(c<col-1&&map[r][c+1]=='.'&&memo[r][c+1]==false){ ++num; memo[r][c+1]=true; DFS(r,c+1); } } int main(){ while (cin>>col>>row&&row!=0&&col!=0) { num=1; int r,c; for(int i=0;i<row;++i) for(int j=0;j<col;++j){ cin>>map[i][j]; memo[i][j]=false; if (map[i][j]=='@') { r=i; c=j; } } map[r][c]=true; DFS(r,c); cout<<num<<endl; } return 0; }