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

2021-09-29 01:27:33 字數 588 閱讀 1683

素數環:從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數

【演算法流程】

1、資料初始化;

2、遞迴填數:判斷第i個數填入是否合法;

a、如果合法:填數;判斷是否到達目標(20個已填完):

是,列印結果;不是,遞迴填下乙個;(剪枝條件)

b、如果不合法:選擇下一種可能;

#include#include#include#includeusing namespace std;

bool b[21]=; //判斷i是否出現在素數環中

int total=0,a[21]=; //a記錄素數環中的每乙個數

int search(int t); //回溯過程。形參表示素數環中的數的編號

int print(); //輸出方案

bool pd(int,int); //判斷素數

int search(int t)

else

search(t+1);

b[i]=0;

}}int main()

回溯解決素數環問題

素數環是乙個電腦程式問題,指的是將從1到n這n個整數圍成乙個圓環,若其中任意2個相鄰的數字相加,結果均為素數 我們可以根據問題建成乙個根節點為1深度為n的n叉數。通過對解空間的進行回溯剪枝 條件就是相鄰兩元素和為素數以及是否重複使用 就可以得到所有解。public class primering p...

素數環 回溯演算法

設計 這個素數環有20個位置,每個位置可以填寫1 20的整數,可以對每個位置從1搜尋 約束條件 1 與前面已經填寫的數不重複 2 與前乙個數的和為素數 3 最後乙個數與第乙個數的和為素數 在填寫第k個位置時,如果滿足約束條件,則繼續填寫k 1個位置 如果1 20都不滿足,就回溯到k 1個位置,從原來...

素數環問題(回溯)

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