广搜的学习

来源:互联网 发布:百度股票数据接口api 编辑:程序博客网 时间:2024/04/28 05:12
#include<stdio.h>#include<iostream>#include<string.h>#include<queue>using namespace std;int N, K;const int MAXN = 100000;int visited[MAXN + 10];struct Step{    int x;    int steps;    Step(int xx, int s):x(xx),steps(s){}};queue<Step>q;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));                visited[s.x-1] = 1;            }            if( s.x+1 <= MAXN && !visited[s.x+1])            {                q.push(Step(s.x+1, s.steps+1));                visited[s.x+1] = 1;            }            if( s.x*2 <= MAXN && !visited[s.x*2] )            {                q.push(Step(s.x*2, s.steps+1));                visited[s.x*2] = 1;            }            q.pop();        }    }    return 0;}

0 0
原创粉丝点击