素數環問題 回溯法

2021-10-25 10:36:21 字數 812 閱讀 2548

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

現在要求輸入乙個n,求n個數圍成一圈有多少種素數環,規定第乙個數字是1。

分析:準備:

num紀錄素數環個數

將結果放入快取陣列a,a[i]代表第i個資料

設定visit陣列,visit[i]==1代表數字i已經在快取陣列中

dfs(step)函式用於從第step個資料開始搜尋

初始化:

由於第乙個資料固定為1,所以主函式裡a[1]=1; visit[1]=1; dfs(2)從第2個數開始搜尋

dfs函式:

從數字2到數字n分析:如果數字沒有放入快取陣列且加上快取陣列上一位後和為奇數,則將此數字放入快取陣列a中,visit位置一,然後接著分析下一快取陣列位置應該放哪個數字。

直到step等於n+1,說明快取陣列前n個位置都放入了數字,如果快取陣列內的首尾資料和是奇數,就把快取陣列內1到n位置的資料輸出出來,並且素數環個數加1

#include

#include

using namespace std;

int num=0,n;

int a[100]

;int visit[100]

;int check(int k)

void dfs(int step)

else}}

}int main(void)

素數環問題 回溯法

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

素數環問題(回溯)

素數環問題描述 問題描述 將從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個相鄰的數字相加,結果均為素數 我們可以根據問題建成乙個根節點為1深度為n的n叉數。通過對解空間的進行回溯剪枝 條件就是相鄰兩元素和為素數以及是否重複使用 就可以得到所有解。public class primering p...