BFS--POJ 1979

此题大意讲的是只能走黑砖,求他所能走的黑砖个数。

这题让我很郁闷,写完了结果各种不对,最后才调试出原来我把行列的数搞反了,千万要细心!

还有

p=que.front();
que.pop();
这段代码只能放在循环内的前面,如若置于后面则还没有搜索完全就很容易跳出。
 1 #include<iostream>
2 #include<queue>
3 #include<cstring>
4 using namespace std;
5
6 char map[21][21];
7 int m[21][21];
8 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
9 int row,col;
10 struct point
11 {
12 int x,y;
13 }pp;
14 queue<point> que;
15
16 int bfs()
17 {
18 int i,dx,dy,step=1;
19 point p,q;
20 while(!que.empty())
21 {
22 p=que.front();
23 que.pop();
24 for(i=0;i<4;i++)
25 {
26 dx=p.x+dir[i][0];
27 dy=p.y+dir[i][1];
28 if(dx<0||dx>row-1||dy<0||dy>col-1)
29 continue;
30 if(map[dx][dy]=='.'&&!m[dx][dy])
31 {
32 m[dx][dy]=1;
33 q.x=dx;q.y=dy;
34 step++;
35 que.push(q);
36 }
37 }
38 }
39 return step;
40 }
41
42 int main()
43 {
44 int i,j;
45 while(cin>>col>>row&&!(row==0&&col==0))
46 {
47 memset(m,0,sizeof(m));
48 for(i=0;i<row;i++)
49 cin>>map[i];
50 for(i=0;i<row;i++)
51 for(j=0;j<col;j++)
52 if(map[i][j]=='@')
53 {
54 pp.x=i;
55 pp.y=j;
56 m[i][j]=1;
57 que.push(pp);
58 }
59 cout<<bfs()<<endl;
60 }
61 return 0;
62 }

只能在各种空间去捕捉她的影子,却又很无奈,希望她好吧。下午去机房吧,忙起来就会忘掉这一切。Fight!

posted @ 2012-02-18 10:30  hankers  阅读(266)  评论(0编辑  收藏  举报