UVA-524 素數環 回溯
經典回溯題
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
#define DEBUG
const int maxn=1000+5,maxv=26 ,INF=0x3f3f3f3f,mod=100000000;
bool isp[maxn],visited[maxn];
int A[maxn];
bool is_prime(int n){
for(int i=2;i<=n/2;i++){
if(n%i==0)return 0;
}
return 1;
}
void dfs(int cur,int n,int* A){
if(cur==n&&isp[A[n-1]+A[0]]){
for(int i=0;i<n;i++){
printf("%d",A[i]);
if (i!=n-1)printf(" ");
}
printf("\n");
return;
}
for(int i=2;i<=n;i++){
if(visited[i])continue;
if(!isp[i+A[cur-1]])continue;
A[cur]=i;
visited[i]=1;
dfs(cur+1,n,A);
visited[i]=0;
}
}
int main(){
#ifdef DEBUG
freopen("in.txt" , "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int n;
int kase=0;
while(cin>>n){
if(kase)printf("\n");
kase++;
memset(visited,0,sizeof(visited));
visited[1]=1;
A[0]=1;
for(int i=2;i<=2*n;i++)if(is_prime(i))isp[i]=1;
printf("Case %d:\n", kase);
dfs(1,n,A);
}
#ifdef DEBUG
fclose(stdin);
fclose(stdout);
#endif
return 0;
}
相關推薦
UVA-524 素數環 回溯
經典回溯題 #include <cstdio> #include <cstring> #include <vector> #include <queue> #include <iostream> #i
UVA 524 素數環 【dfs/回溯法】
prim output %d set class script int 素數環 ogr Description A ring is composed of n (even number) circles as shown in diagram. Put natu
noj算法 素數環 回溯法
clu clas 輸入 check col 回溯法 name bsp mes 描述: 把1到20這重新排列,使得排列後的序列A滿足:a. 任意相鄰兩個數之和是素數b. 不存在滿足條件a的序列B使得:A和B的前k(0 <= k <= 19)項相同且B的第k+1
nyoj 488素數環 回溯dfs
題目連結:http://acm.nyist.net/JudgeOnline/problem.php?pid=488 有一個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數(包括首尾)的和都為素數,稱為素數環。 為了簡便起見,我們規定每個素數環都從1開始。例如,下
素數環(簡單的回溯運用)
題目描述 輸入正整數n,把整數1,2,3,…n組成一個環,使得相鄰兩個整數之和均為素數。輸出時從整數1開始逆時針排列。同一個環應恰好只輸出一次。n<=16 #include"stdio.h" int n; static int vis[17];運用的是靜態性的變數,初值為0;此
回溯法解決素數環
/*********************************************************************** 輸入正整數n,把整數1,2,3……,n組成一個環,使得相鄰兩個整數之和均為素數,輸出時從整數1開始逆時針排序.同一個環應恰好輸
素數環 DFS +回溯
int visit[200]; void DFS(int c) { a[0]=1;// 初始為1 if(c==n&&!su[a[0]+a[n-1]])// 如果 c==n 則結束 如果 第一個與最後一個和也為素數 則 輸出 { for(int
(回溯Uva524)素數環
題目 輸入正整數,把整數1,2,3,···,n組成一個環,使得相鄰兩個整數之和均為素數。輸出時從整數1開始逆時針排列。同一個環應恰好輸出一次。n<=16 樣例輸入 6 樣例輸出 1 4 3 2 5 6 1 6 5 2 3 4 分析與解答
c++演算法之回溯 素數環(二)
Description 輸入正整數n,把整數1,2,3,…,n組成一個環,使得相鄰兩個整數之和均為素數。把全部的解按字典序排序後,從1開始編號,依次輸出指定編號的k組解。最後一行輸出總的方案數。同一
hdu 1016 素數環 深搜,回溯
#include<iostream> using namespace std; #include<cstdio> #include<cmath> #include&
素數環 dfs+回溯
題意:給定一個整數,求其滿足起點為1的素數環,,並把所有的素數環輸出來。型別:dfs+回溯思路:因為起點為1,所以每次都從1開始進行深度優先搜尋,設定一個數組ring,用來存放素數環的路徑,當找到素數環的時候就列印環的路徑。其中有一個剪枝的操作,如果給定的整數為奇數,那麼肯定
回溯經典之素數環問題
問題描述:假定有從1...n這n(n<=16)個數,求其中一個序列,使得相鄰兩個數的和是素數,並且第一個和最後一個數也是素數 思路 1.我們可以假定已經有一個序列滿足任意兩個數之和是素數 2.下
《資訊學奧賽一本通》搜尋與回溯章節--素數環問題
題目:素數環:從1到20這20個數擺成一個環,要求相鄰的兩個數的和是一個素數 簡單的搜尋與回溯 #include <iostream> #include <cmath> us
nyoj ACM:素數環(DFS 回溯 遞迴)
素數環 時間限制:1000 ms | 記憶體限制:65535 KB 難度:2 描述 有一個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數(包括首尾)的和都為素數,稱為素數環。
回溯法解決素數環問題
#include <iostream> #include <math.h> using namespace std; #define N 100000 int isp[2 * N]; int a[N]; int visited[N]; int i
素數環問題---回溯
size pre argv 。。 color cstring ++ ons 結果 素數環 題目:輸入正整數n,把整數1。2,3,...,n組成一個環。使得相鄰兩個整數之和均為素數。 輸出時從整數1開始逆時針排列。 同一個環應該恰好輸出一次。n<=16 分析:首
算法練習--素數環
輸入 算法 result pri urn ons setup font ava 輸入一個數字n,輸出[1,N]內的全部組合,滿足a[i]+a[i+1]為素數。當中i∈[0,i-1]比如輸入:6輸出:1,4,3,2,5,6實現:var MAX = 10; ////setu
Prime Ring Problem 經典素數環
str anti 兩個 row num lan 輸出 idt class Prime Ring Problem A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..
第七章素數環
bre cin 回溯法 nbsp ret 網上 不存在 != algo 在網上搜索了一下我的第一種方法應該是減枝的策略,回溯也是減枝的一種 #include <iostream> #include <cstdio> #include <a
素數環
tab mat while printf return math div print tdi 1 #include<stdio.h> 2 #include<math.h> 3 int n; 4 int table[101]; 5 int