整數變換問題 回溯法

2021-07-07 09:46:29 字數 820 閱讀 8467

整數變換問題:關於整數i 的變換f 和g 定義如下:f(i)=3i;g(i)=i/2。 試設計乙個演算法,對於給定的2 個整數n 和m,用最少的f 和g 變換次數將n 變換為m。 例如,可以將整數15 用4 次變換將它變換為整數4:4=gfgg(15)。當整數n 不可能變換為整數m 時,演算法應如何處理?

這是3n+1問題的變形。為了找最短變換序列,用逐步加深的回溯法搜尋。

開發環境是vs2013,c++語言

//#include "stdafx.h"

#include"iostream"

using namespace std;

static int n;//要變換的數

static int m;//要變換成的數

static int k;//變換的次數

static bool found;//查詢結果

static int result[100];//最多變換100次

bool search(int dep, int n);

void compute();

int fg(int n, int i);

void compute()

}bool search(int dep, int n)

for (int i = 0; i<2; i++)

} return false;

}int fg(int n, int i)

void main()

compute();

if (found)

cout << endl;

} else{

cout <

整數變換問題 回溯法

整數變換問題 整數i的兩種變換定義為f i 3i,g i i 2 向下取整 設計乙個演算法求給定兩個整數a和b,用最少次數的a和b變換將整數a變換為b 例如4 gfgg 15 題目分析 觀察f和g兩個函式發現,f總是使得自變數x變大,g總是使得自變數x變小。因此我們在決定讓x執行哪個函式之前必須先判...

整數變換問題 (回溯法)

整數變換問題 time limit 1000 ms memory limit 65536 kib problem description 整數變換問題。關於整數i的變換f和g定義如下 f i 3i 試設計乙個演算法,對於給定的2 個整數n和m,用最少的f和g變換次數將n變換為m。例如,可以將整數15...

整數變換問題 回溯演算法 C

問題描述 整數i的兩種變換定義為 f i 3i,g i i 2 向下取整 設計乙個演算法求給定兩個整數n和m,用最少次數的f 和 g變換將整數n變換為m 例如 可以將整數15通過4次變換將它變成4,4 gfgg 15 當整數n不可能轉換為m時,演算法應當怎麼處理。本題是當出現重複數字,認為無法轉換。...