2013年11月3日 星期日

[UVA] 524 Prime Ring Problem


#include<stdio.h>
#include<string.h>
int s[50]={0},arr[20],u[20]={0},n;
void dfs(int k){
    int i;
    if(k==n){
        if(!s[arr[0]+arr[k-1]]){
            printf("%d",arr[0]);
            for(i=1;i<n;i++)
                printf(" %d",arr[i]);
            puts("");
        }
        return;
    }
    for(i=1;i<=n;i++){
        if(!u[i]){
            if(!s[arr[k-1]+i])
                u[i]=1,arr[k]=i,dfs(k+1),u[i]=0;
        }
    }
}
int main(){
    int i,j,C=0;
    for(i=2;i<=40;i++){
        if(!s[i]){
            for(j=i+i;j<=40;j+=i)
                s[j]=1;
        }
    }
    while(scanf("%d",&n)!=EOF){
        if(C) puts("");
        printf("Case %d:\n",++C);
        arr[0]=1,u[1]=1;
        dfs(1);
    }
}

沒有留言:

張貼留言