bfs广度优先搜索
最近做了一些搜索题,突然,发现,原来是有套路这种东西存在的。总结了一些比较基础的bfs代码。该代码是poj3278农夫追牛问题的AC代码:
代码如下:
主要看注释
#include <iostream>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
#define N 10000000
type start,aim;
struct node{
int x;
int step;
};
bool vis[N];
queue<node> q;
void bfs()
{
while(!q.empty())
{
if(q.front().x==aim)
{
return;
}
node tmp;
int X=q.front().x;
int Step=q.front().step;
q.pop();
if(X>=
1&&!vis[X-
1])
{
tmp.x=X-
1;
tmp.step=Step+
1;
vis[X-
1]=
1;
q.push(tmp);
}
if(X<aim&&!vis[X+
1])
{
tmp.x=X+
1;
tmp.step=Step+
1;
vis[X+
1]=
1;
q.push(tmp);
}
if(X<aim&&!vis[
2*X])
{
tmp.x=
2*X;
tmp.step=Step+
1;
vis[
2*X]=
1;
q.push(tmp);
}
}
}
int main()
{
while(
cin>>start>>aim)
{
memset(vis,
0,
sizeof(vis));
while(!q.empty())q.pop();
node ST;
ST.x=start;
ST.step=
0;
q.push(ST);
bfs();
cout<<q.front().step<<endl;
}
return 0;
}