加一乘二平方

来源:互联网 发布:windows update35%卡住 编辑:程序博客网 时间:2024/04/29 14:00

这里写图片描述

这里写代码片#include<iostream>#include<queue> //队列 using namespace std;queue <int> arr;    //定义一个队列(队列元素为整型) int m, n;int used[10001]={0};int step[10001];void init();int bfs();int moveto(int u,int dire);int main(){    int num;    cin >> m >> n;    init();    num=bfs();    cout<<num<<endl;    return (0);} void init(){    arr.push(m);    //把起点加入队列     used[m]=1;  //标注起点是已到达过的节点     step[m]=0;  //记录起点是零步到达的节点 }int bfs(){    int u, v, i;    while(!arr.empty()) //队列不空时继续     {        u=arr.front (); //队首元素给u         arr.pop();  //队首元素出队         for(i=0;i<3;i++)    //0-加一;1-乘二;3-平方        {            v=moveto(u,i);  //v=u达到的第i个新状态            if(v==n)                return(step[u]+1);  //返回最小步数             if(v<=n&&used[v]==0)     //如果v有进一步拓展的价值                {                       arr.push(v);    //v入队                     used[v]=1;                    step[v]=step[u]+1;  //记录到达v的最小步数                 }         }     }    return (-1);}int moveto(int u,int dire){    if(dire==0)        return (u+1);    else if(dire==1)        return (u+u);    else if(dire==2)        return (u*u);}
原创粉丝点击