BFS简单搜索--POJ 2243

这题就是简单的BFS搜索,刚刚转到C++,还有很多库函数不熟悉,理解到BFS是一种奇妙的迭代法,其用的主要是队列的性质。

 1 /*BFS简单搜索*/
2 #include<iostream>
3 #include<queue>
4 #include<cstring>
5
6 using namespace std;
7
8 int map[8][8];//标记数组
9 int dir[8][2]={{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};
10
11 struct point
12 {
13 int row,col;
14 int step;
15 }p;
16
17 int bfs(point s,point e,int step)
18 {
19 queue<point> que;
20 point p;
21 int i,x=0,y=0;
22 while(1)
23 {
24 if(s.row==e.row&&s.col==e.col)//对于s的这样使用很不错
25 {
26 return s.step;
27 }
28 for(i=0;i<8;i++)
29 {
30 x=s.row+dir[i][0];
31 y=s.col+dir[i][1];
32 if(x<0||x>=8||y<0||y>=8)
33 continue;
34 if(!map[x][y])
35 {
36 p.row=x;
37 p.col=y;
38 map[x][y]=1;
39 p.step=s.step+1;//注意计算步数
40 que.push(p);
41 }
42 }
43 s=que.front();
44 que.pop();
45 }
46 }
47 int main()
48 {
49 point start,end;
50 char c1[3],c2[3];
51 while(cin>>c1>>c2)
52 {
53 start.col=c1[0]-'a';
54 end.col=c2[0]-'a';
55 start.row=c1[1]-'1';
56 end.row=c2[1]-'1';
57 start.step=0;
58 memset(map,0,sizeof(map));
59 cout<<"To get from "<<c1<<" to "<<c2<<" takes "<<bfs(start,end,0)<<" knight moves."<<endl;
60 }
61 return 0;
62 }



posted @ 2012-02-16 23:18  hankers  阅读(213)  评论(0编辑  收藏  举报