Breadth-first search elements:
Breadth-first search elements are not as depth-first traversal search elements as a node in the end, but layer by layer traversal,
Unlike deep search, the algorithm uses a queue.
Breadth-first algorithm:
example:
Code:
/*农夫找牛*/
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int N, K; // N for the location of the farmer, K bovine position
const int MAXN = 100000 ;
int visited [+ MAXN 10 ]; // sentence marking, visited [i] = true has been extended through i represents
//表示一个坐标
struct Step{
int x;//位置
int steps;//到达所需要的步数
Step(int xx,int s):x(xx),steps(s){}//参数初始化
};
queue<Step>q;//队列,即OPEN表
int main(){
cin>>N>>K;
memset(visited,0,sizeof(visited));//初始化,表示都没走过
q.push(Step(N,0));//农夫的起始位置
visited[N]=1;
while(!q.empty()) {
Step s = q.front();//取出头结点
if(s.x==K) //如果找到目标
{
cout<<s.steps<<endl;
return 0;
}
else
{
if(s.x-1>=0&&!visited[s.x-1])//该点可以移动,且没有走过
{
q.push(Step(s.x-1,s.steps+1));//压入队列,且步数+1
visited[s.x-1]=1;
}
if(s.x+1>=0&&!visited[s.x+1])
{
q.push(Step(s.x+1,s.steps+1));//压入队列,且步数+1
visited[s.x+1]=1;
}
if(s.x*2>=0&&!visited[s.x*2])
{
q.push(Step(s.x*2,s.steps*2));//压入队列,且步数+1
visited[s.x*2]=1;
}
q.pop();//如果相邻结点都遍历完了或没有相邻结点,就出队
}
}
return 0;
}