搜索,bfs。依旧用队列做。边界处懒得处理,全部初始化为-1。当然,0也可以。AC代码如下:
#include<iostream> #include<deque> using namespace std;struct Point {int x,y; } x,y;int main() {char str[22];int i,j,n,m,s[22][22],t;deque<Point> q;while(cin>>m>>n && (m||n)){q.clear();memset(s,-1,sizeof(s));for(t=i=1;i<=n;i++)for(cin>>str+1,j=1;j<=m;j++)if(str[j]=='.')s[i][j]=0;else if(str[j]=='@'){x.x=i;x.y=j;q.push_back(x);}while(!q.empty()){x=q.front();for(i=-2;i<=2;i++)if(s[y.x=x.x+i/2][y.y=x.y+i%2]!=-1){q.push_back(y);s[y.x][y.y]=-1;t++;}q.pop_front();}cout<<t<<endl;} }