杭电 HOJ 1312 Red and Black 解题报告
搜索,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; } }