专题二 1020

来源:互联网 发布:看图片的软件 编辑:程序博客网 时间:2024/06/12 03:39
一、题目编号:
          1020
二、简单题意:
         给出N,求所有由1-N组成的首位为1环形序列,要求相邻两数的和为素数。
三、解题思路形成过程
         这道题非常类似于N皇后问题,使用的是深度优先搜索方法。按照从小到大的搜索顺序搜索后的结果就是符合输出顺序的。
四、感想
         要注意细节问题,空格空行需要谨慎。
五、AC代码
#include<stdio.h>
#include<math.h>
int a[25];
bool use[25];
int n;
 
bool isprime(int num){
    int i;
    for(i=2;i<=sqrt(num+0.0);i++){
        if(num%i==0)
           return false;
    }
    return true;
}

void DFS(int num){
    int i;
    if(n==num&&isprime(1+a[n-1])){
        for(i=0;i<n;i++){
            printf(i==n-1?"%d\n":"%d ",a[i]);
        }
    }
    else{
        for(i=2;i<=n;i++){
            if(!use[i]&&isprime(i+a[num-1])){
                a[num]=i;
                use[i]=true;
                DFS(num+1);
                use[i]=false;
            }
        }
    }
}

void init(){
    int i;
    for(i=0;i<n;i++){
        use[i]=false;
    }
    a[0]=1;
}
int main(){
    int t=0;
    while(scanf("%d",&n)!=EOF){
        init();
        printf("Case %d:\n",++t);
        DFS(1);
        puts("");
    }
}
0 0