hdu 1016 Prime Ring Problem

来源:互联网 发布:小差事软件下载 编辑:程序博客网 时间:2024/04/19 11:36

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1016

 

就是简单的DFS加回溯。。

没想到这也不会超时。。。

 

对于素数用筛选法打表处理;

 

下面是AC代码:

#include<iostream>#include<cstring>#include<cmath>using namespace std;int b[2000];int a[22];int mark[22];void Init(){   int i,j;for(i=1;i<40;i++)b[i]=1;  for(i=2;i<40;i++)  {     for(j=2;j<40;j++)  b[i*j]=0;    }}void dfs(int n,int k){int i;if(k>n){for(i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);}else{for(i=2;i<=n;i++){a[k]=i;if(k==n&&!mark[i]&&b[a[k-1]+a[k]]&&b[a[k]+a[1]]){     mark[i]=1;dfs(n,k+1);mark[i]=0;}    if(k!=n&&!mark[i]&&b[a[k]+a[k-1]]){mark[i]=1;dfs(n,k+1);mark[i]=0;}}}}int main(){int n;int ca=1;Init();while(cin>>n){printf("Case %d:\n",ca++);a[1]=1;mark[1]=1;memset(mark,0,sizeof(mark));dfs(n,2);printf("\n");}return 0;}


 

 

原创粉丝点击