题目 http://poj.org/problem?id=1979
这是一个简单的BFS 刚开始调试老错了 对不上答案 很纠结 最后发现原来我的w 和 h搞反了哦 含纠结。。。。
做这个题告诉我 下次题目一定要 小心啊 不要犯这个低级错误。。呵呵
下面是AC代码
#include<iostream> #include<queue> #include<cstdio> using namespace std; struct node{ int x,y;}; char a[21][21]; int w,h,visit[21][21],sx,sy; ///sx sy @ 起始位置 visit标记 int dre[4][2]={0,1,1,0,0,-1,-1,0}; ///上右下左 void Bfs() { queue<node> Q; node p,s; p.x=sx; p.y=sy; Q.push(p); int sum=1; visit[sx][sy]=1; ///标记 while(!Q.empty()) { s=Q.front(); Q.pop(); for(int i=0;i<4;i++) { p=s; p.x+=dre[i][0]; ///上右下左 p.y+=dre[i][1]; if(a[p.x][p.y]=='#') continue; ///如果是#就退出来 if(p.x>0&&p.x<=h&&p.y>0&&p.y<=w) ///要在这个长方形下面。这样h 和w位置 { if(a[p.x][p.y]=='.'&&visit[p.x][p.y]==0) ///标记一下 { visit[p.x][p.y]=1; ///标记 sum++; ///计算一共有多少 . 和 Q.push(p); } } } } cout<<sum<<endl; } int main() { int i,j; while(scanf("%d%d",&w,&h)!=EOF,w+h) { for(i=1;i<=h;i++) ///注意h和w位置 for(j=1;j<=w;j++) { cin>>a[i][j]; if(a[i][j]=='@'){sx=i;sy=j;} ///记录起始位置。 visit[i][j]=0; } Bfs(); } return 0; }