HDU 1016 素数环

来源:互联网 发布:田丰 阿里云 领英 编辑:程序博客网 时间:2024/05/21 22:36

A - Prime Ring Problem

 
题意是输入n,把从1——n的自然数放入一个环里,要求每相邻的两个数之和为素数。

素数判断和深度搜索问题
#include<stdio.h>#include<string.h>int visited[25],a[25],n;    //数组a保存满足条件的数,数组visited对已访问过的数进行标记int pre[25];int prime(){int i,j;memset(pre,0,sizeof(pre));for(i=2;i<25;i++){if(pre[i])continue;else{for(j=i*i;j<25;j+=i){pre[j]=1;}}}}int dfs(int m){int i;prime();if(m==n&&!pre[a[m-1]+a[0]])     //都符合要求,输出{for(i=0;i<m-1;i++)printf("%d ",a[i]);printf("%d\n",a[m-1]);}else{for(i=2;i<=n;i++){if(visited[i]==0)       //若未使用过该数{if(!pre[i+a[m-1]])   //两数之和为素数{visited[i]=1; //对使用的数进行标记a[m++]=i;dfs(m);visited[i]=0; //取消标记m--;          //回溯}}}}return 0;}int main(){int num=0;while(scanf("%d",&n)!=EOF){num++;printf("Case %d:\n",num);memset(visited,0,sizeof(visited));   a[0]=1;  dfs(1);printf("\n");}return 0;} 

1 0
原创粉丝点击