Breadth-first search basics

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;
} 
View Code

 

 

  

 

Guess you like

Origin www.cnblogs.com/printwangzhe/p/12333347.html