1. 程式人生 > >UVA-524 素數環 回溯

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