设为首页 加入收藏

TOP

hdu1016Prime Ring Problem
2015-07-24 05:33:46 来源: 作者: 【 】 浏览:6
Tags:hdu1016Prime Ring Problem
??

就是说,给你一个数n,

要你把1到n都连在一起成环,

每个数不可重复,

且相连的两个数的和要是素数。


把所有情况输出来,

我是用dfs暴力出来的,

首先把素数打表,

然后每次顺时针预测下一个数,

因为这个数必须要是素数减去上一个数,

很好枚举。

我的代码如下:

#include
  
   
#include
   
     #include
    
      using namespace std; int map[30],num,prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41},used[30],save[10000][30],cnt; void init() { cnt=0; memset(used,0,sizeof(used)); used[1]=1; map[1]=1; } int cmp(const void *a,const void *b) { return *(int *)a - *(int *)b; } bool isprime(int x) { int *p; p=(int *)bsearch(&x,prime,13,sizeof(int),cmp); if(p!=NULL) return 1; return 0; } void dfs(int i) { if(i==num) { if(isprime(map[num]+1)) { memcpy(save[cnt],map,sizeof(save[cnt])); cnt++; } return; } for(int j=0;j<13;j++) { int tmp=prime[j]-map[i]; if(tmp>num) break; if(tmp>1&&!used[tmp]) { map[i+1]=tmp; used[tmp]=1; dfs(i+1); used[tmp]=0; } } } int main() { int exp=0; while(scanf("%d",&num)!=EOF) { printf("Case %d:\n",++exp); init(); dfs(1); for(int i=0;i
     
      

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 1274The Perfect Stall 下一篇NYOJ-252 01串

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: