回溯解決素數環問題

2021-10-01 20:09:55 字數 870 閱讀 6783

素數環是乙個電腦程式問題,指的是將從1到n這n個整數圍成乙個圓環,若其中任意2個相鄰的數字相加,結果均為素數

我們可以根據問題建成乙個根節點為1深度為n的n叉數。通過對解空間的進行回溯剪枝(條件就是相鄰兩元素和為素數以及是否重複使用)就可以得到所有解。

public

class

primering

public

void

printall()

//列印

public

static

boolean

isprime

(int n)

return

true;}

protected

void

backtrack

(int i)

//實現方法}}

else}}

protected

boolean

restrict

(int i)

//約束條件,包括約束剪枝和限界剪枝 i當前位置

}return

true;}

return

false;}

protected

void

print()

//輸出乙個解x,值為0/1,形式為「(,)」

}public

static

void

main

(string args)

}

結果示例

回溯演算法解決素數環問題

素數環 從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數 演算法流程 1 資料初始化 2 遞迴填數 判斷第i個數填入是否合法 a 如果合法 填數 判斷是否到達目標 20個已填完 是,列印結果 不是,遞迴填下乙個 剪枝條件 b 如果不合法 選擇下一種可能 include include ...

素數環問題(回溯)

素數環問題描述 問題描述 將從1到n這n個整數圍成乙個圓環,若其中任意2個相鄰的數字相加,結果均為素數,那麼這個環就成為素數環。注 第1個位置恒為1 include includeint n 環內元素個數 int p 10 p i 表示第i個位置的元素 p 1 1 第1個位置恒為1 int hash...

素數環問題 回溯法

素數環是乙個電腦程式問題,指的是將從1到n這n個整數圍成乙個圓環,若其中任意2個相鄰的數字相加,結果均為素數,那麼這個環就成為素數環。現在要求輸入乙個n,求n個數圍成一圈有多少種素數環,規定第乙個數字是1。include includeusing namespace std int n 0 int ...