素數環是乙個電腦程式問題,指的是將從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 ...