1. 程式人生 > >素數環 DFS +回溯

素數環 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 i=0; i<n-1; i++)
            printf("%d ",a[i]);
        printf("%d",a[n-1]);
        printf("\n");
    }
    else
    {
        for(int i=2; i<=n; i++)
            if(!visit[i]&&!su[i+a[c-1]])//  如果  次數 與前一個數相加為素數 且沒被拜訪過 則  賦值
            {
                a[c]=i;
                //printf("%d   ",a[c]);
                visit[i]=1;//  標記
                DFS(c+1);//  繼續查詢下一行
                visit[i]=0;//回溯
            }
    }
}

相關推薦

素數 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

素數 dfs+回溯

題意:給定一個整數,求其滿足起點為1的素數環,,並把所有的素數環輸出來。型別:dfs+回溯思路:因為起點為1,所以每次都從1開始進行深度優先搜尋,設定一個數組ring,用來存放素數環的路徑,當找到素數環的時候就列印環的路徑。其中有一個剪枝的操作,如果給定的整數為奇數,那麼肯定

nyoj ACM:素數(DFS 回溯 遞迴)

素數環 時間限制:1000 ms | 記憶體限制:65535 KB 難度:2 描述 有一個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數(包括首尾)的和都為素數,稱為素數環。

1571 - 素數 DFS深度優化搜尋的應用

1571 - 素數環 時間限制:1秒 記憶體限制:128兆     題目描述 有一個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數(包括首尾)的和都為素數,稱為素數環。 為了簡便起見,我們規定每個素數環都從1開始。例如,下圖就是6的一個素數環。

素數問題---回溯

size pre argv 。。 color cstring ++ ons 結果 素數環 題目:輸入正整數n,把整數1。2,3,...,n組成一個環。使得相鄰兩個整數之和均為素數。 輸出時從整數1開始逆時針排列。 同一個環應該恰好輸出一次。n<=16 分析:首

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

nyoj 488素數 回溯dfs

題目連結:http://acm.nyist.net/JudgeOnline/problem.php?pid=488 有一個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數(包括首尾)的和都為素數,稱為素數環。 為了簡便起見,我們規定每個素數環都從1開始。例如,下

noj算法 素數 回溯

clu clas 輸入 check col 回溯法 name bsp mes 描述: 把1到20這重新排列,使得排列後的序列A滿足:a. 任意相鄰兩個數之和是素數b. 不存在滿足條件a的序列B使得:A和B的前k(0 <= k <= 19)項相同且B的第k+1

素數(簡單的回溯運用)

題目描述 輸入正整數n,把整數1,2,3,…n組成一個環,使得相鄰兩個整數之和均為素數。輸出時從整數1開始逆時針排列。同一個環應恰好只輸出一次。n<=16 #include"stdio.h" int n; static int vis[17];運用的是靜態性的變數,初值為0;此

HDU 1016(DFS素數

初看很難 其實很簡單的一道題目 大致就是1-n 把這n個數填到一個環裡 相鄰的和是素數 求怎麼填 我開始的時候 覺得要順時針還要逆時針 心想繁瑣 就直接找了部落格 然後部落格的程式碼異常簡潔啊 突然領悟了 逆時針的只要水平翻轉一下一樣是個順時針的 也就是說 這個逆時針已經在所有情況裡了

回溯法解決素數

/*********************************************************************** 輸入正整數n,把整數1,2,3……,n組成一個環,使得相鄰兩個整數之和均為素數,輸出時從整數1開始逆時針排序.同一個環應恰好輸

UVA-524 素數 回溯

經典回溯題 #include <cstdio> #include <cstring> #include <vector> #include <queue> #include <iostream> #i

hdu 1016 Prime Ring Problem(dfs素數

Prime Ring Problem Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I

回溯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

原題: Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2720

回溯經典之素數問題

問題描述:假定有從1...n這n(n<=16)個數,求其中一個序列,使得相鄰兩個數的和是素數,並且第一個和最後一個數也是素數 思路 1.我們可以假定已經有一個序列滿足任意兩個數之和是素數 2.下

《資訊學奧賽一本通》搜尋與回溯章節--素數問題

題目:素數環:從1到20這20個數擺成一個環,要求相鄰的兩個數的和是一個素數 簡單的搜尋與回溯 #include <iostream> #include <cmath> us

[DFS]《奧賽一本通》 素數

原題:在書上,大致就是:將從1到20這20個整數圍成一個圓環,若其中任意2個相鄰的數字相加,結果均為素數,那麼這個環就成為素數環。 時間:2014.1.27 型別:回溯,dfs 原始碼: #include<iostream> using namespace