加1乘2平方
阿新 • • 發佈:2018-11-10
時限:1000ms 記憶體限制:10000K 總時限:3000ms
描述
最簡單的佇列的使用
#include <iostream>
#include <queue>
using namespace std;
queue<int> q1;
int main()
{
int temp, x;
q1.push(5);//入隊
q1.push(8);//入隊
temp = q1.front();//訪問隊首元素
q1.pop();//出隊
q1.empty();//判佇列是否為空
q1.back();//返回隊尾元素
q1.size();//返回佇列長度
}
給定兩個正整數m、n,問只能做加1、乘2和平方這三種變化,從m變化到n最少需要幾次
輸入
輸入兩個10000以內的正整數m和n,且m小於n
輸出
輸出從m變化到n的最少次數
輸入樣例
1 16
輸出樣例
3
code:
#include<iostream> #include<queue> using namespace std; queue<int>q1; int used[10001]={0}; int step[10001]; int n,m; 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() { q1.push(m); used[m]=1; step[m]=0; } int bfs() { int u,v,i; while(!q1.empty()) { u=q1.front(); q1.pop(); for(i=0;i<3;i++) { v=moveto(u,i); if(v==n) { return (step[u]+1); } if(v<n&&used[v]==0) { q1.push(v); used[v]=1; step[v]=step[u]+1; } } } return 0; } int moveto(int u,int dire) { if(dire==0) { return ( u + 1 ); } else if(dire==1) { return ( 2 * u ); } else { return ( u * u ); } }