C语言中用队列和搜索解决"加1乘2平方问题"
2017-11-07 10:52
543 查看
描述
给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次
输入
输入两个10000以内的正整数m和n,且m小于n
输出
输出从m变化到n的最少次数
输入样例
1 16
输出样例
3
给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次
输入
输入两个10000以内的正整数m和n,且m小于n
输出
输出从m变化到n的最少次数
输入样例
1 16
输出样例
3
#include<iostream> #include<stdio.h> #include<queue>//用队列声明头文件 using namespace std; queue<int> q1;//声明队列 int m,n; int used[10001]={0};//记录哪个数已经搜索过 int step[10001];//记录计算了几步 void init(); int bfs(); int moveto(int u,int dire); int main() { int num; scanf("%d%d",&m,&n); init();//初始化函数 num=bfs();//搜索并赋值 printf("%d\n",num); return 0; } void init() { q1.push(m);//把起点加入队列 used[m]=1;//标注起点是已到达过的结点 step[m]=0; //记录起点是0步到达的结点 } int bfs() { int u,v,i; while(!q1.empty()) //当队列不空时继续 { u=q1.front(); //队首元素给U q1.pop() ; //队首元素出队 for(i=0;i<3;i++) //0表示+1;1表示乘2;2表示平方 { v=moveto(u,i); //u到达的第i个新状态 if(v==n) //如果v是目标 { return(step[u]+1); //返回到达目标的最小步数 } if(v<=n&&used[v]==0) //如果未越界并且没被用过(有进一步扩展价值); { q1.push(v);//v入队 used[v]=1;//标记v是已到达过的节点 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(2*u); } else if(dire==2) { return(u*u); } }
相关文章推荐
- C语言中用队列和搜索解决跳马问题(多组测试数据)noj1043//运行时错误的一种解决方案
- javaWeb 使用线程池+队列解决"订单并发"问题
- C语言中用队列和广搜解决六数码问题。
- [问题解决]Visio“搜索形状"不能用
- javaWeb 使用线程池+队列解决"订单并发"问题
- SharePoint 2007 "Select People and Groups"中搜索不到其他Domain账户的问题[已解决]
- C语言使用广度优先搜索算法解决迷宫问题(队列)
- 使用C语言来解决循环队列问题的方法
- 解决 iphone 下面 input type="search" 弹出虚拟键盘 不能显示 搜索 问题
- 解决Xcode 4.3.2的"Could not insert new outlet connection"问题
- "ld: library not found for -l...." 问题的解决
- ATLAS升级为ASP.NET AJAX 1.0时"ScriptManager找不到"问题的解决
- 从XMLHttpRequest请求响应里getResponseHeader(header)报错:Refused to get unsafe header "**" 问题解决
- The Folder Path "XXXX" Contains an Invalid Character 问题的另一个解决办法
- 如何解决adb命令报错 "ADB server didn't ACK"问题
- "undefined reference to" 问题解决方法
- 【IDEA14】Failed to load class "org.slf4j.impl.StaticLoggerBinder".问题解决
- 关于ueditor编辑器插件的使用记录 --- 解决"后端配置项没有正常加载,上传插件不能正常使用"上传图片处的问题
- "SQLServer不存在或访问被拒绝"问题的解决
- 因为Android M权限问题导致的"Permission Denial: reading com.android.providers.media.MediaProvider"解决办法