把從1到n(n>=2)這n個數擺成乙個環,要求相鄰的兩個數的和是乙個素數,找出所有滿足條件的環。
1> 解向量:
2> 解空間樹:排列樹,(n-1)!個葉子結點
3> 剪枝函式:isprime( x[t-1]+x[t] ),t=2,3,···,n 約束函式
三. 演算法實現
1 #include2 #include3using
namespace
std;45
int n;//
素數環中的數字個數
6int sum=0;//
可行方案數
7int arr[100];//
存放素數環89
bool isprime(int
x)1019}
20return
true;21
}2223//
回溯法24
void backtrack(int
t)25
36 cout<
38}39else
4048
swap(arr[t],arr[i]);49}
50}51}
5253
void
main()
5464 backtrack(1
);65 cout<
可行方案數為:
"66 cout<
----------------
"<
67 cout<
請輸入素數環中數字的個數:";
68}69 }
素數環 回溯演算法
設計 這個素數環有20個位置,每個位置可以填寫1 20的整數,可以對每個位置從1搜尋 約束條件 1 與前面已經填寫的數不重複 2 與前乙個數的和為素數 3 最後乙個數與第乙個數的和為素數 在填寫第k個位置時,如果滿足約束條件,則繼續填寫k 1個位置 如果1 20都不滿足,就回溯到k 1個位置,從原來...
素數環 回溯
include stdafx.h include includebool isprime int ijudgednum return false void swap int itemp1,int itemp2 void generateperm int piscr,int isize,int icu...
素數環 回溯
1 2 created by arc on 2020 5 1.3 勞動節快樂!45 6 從一到二十個數擺成乙個環,要求相鄰兩個數的和是素數 包括 和 保證第乙個數為一 要不每個還都要輸出num遍 7 輸出所有環8 9 多工,挨個試,用回溯 回溯也是某種意義上的dfs吧 1011 include 12...