1. 程式人生 > >NWPU演算法考試複習--加一乘二平方

NWPU演算法考試複習--加一乘二平方

加一乘二平方

描述 最簡單的佇列的使用 #include #include using namespace std; queue 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

#include<iostream>
#include<stdio.h>
#include<queue>//分支限界法使用佇列的思想,使用這種可以比較方便的寫出一個佇列
using namespace std;
queue<int>q;
int bfs();
int a,b,step[10000];//step陣列記錄步數,表示到達那個數字的步數
int moveto(int key,int dir);
int main()
{
    cin>>a>>b;
    cout<<bfs()<<endl;
    return
0; } int bfs()//廣度優先搜尋函式 { step[a]=0;//第一步不需要變化 q.push(a);//入隊 while(!q.empty())//當佇列非空的時候,進入迴圈 { int u=q.front(); q.pop(); for(int i=0;i<3;i++) { int v=moveto(u,i);//根據題意一共有三種狀態可以移動 if(v==b) return step[u]+1; if(v<b&&
step[v]==0) { step[v]=step[u]+1; q.push(v);//入隊 } } } return 0; } int moveto(int key,int dir) { switch(dir) { case 0: key++;//+1 return key; case 1: key=key*2;//*2 return key; case 2: key=key*key;//平方 return key; } return -1; }