hdu-1016 Prime Ring Problem(素数环 dfs)
2015-05-03 16:32
435 查看
题目来源:点击打开链接
经典深搜,做了好多遍。。。
给定一个数n,把从1到n个数排列成环,使得每个相邻的数的和都是素数。
首先n不可以是奇数,如果n是奇数,肯定会有两个奇数相邻的情况,则结果肯定是偶数,肯定不是素数。剪枝。。。
代码:
经典深搜,做了好多遍。。。
给定一个数n,把从1到n个数排列成环,使得每个相邻的数的和都是素数。
首先n不可以是奇数,如果n是奇数,肯定会有两个奇数相邻的情况,则结果肯定是偶数,肯定不是素数。剪枝。。。
代码:
#include<stdio.h> #include<string.h> int visit[21],ring[21]; int isprime(int n) { int i; for(i=2;i*i<=n;i++) if(n%i==0) return 0; return 1; } void DFS(int k,int n) { int i; if(k>n) { if(isprime(ring[1]+ring )) { printf("1"); for(i=2;i<=n;i++) printf(" %d",ring[i]); printf("\n"); } else return; } for(i=2;i<=n;i++) { if(!visit[i]) { visit[i]=1; ring[k]=i; if(isprime(ring[k]+ring[k-1])) DFS(k+1,n); visit[i]=0; } } } int main() { int n,t=1; visit[1]=ring[1]=1; while(~scanf("%d",&n)) { memset(visit,0,sizeof(visit)); printf("Case %d:\n",t++); if(n==1) printf("1\n"); //剪枝,n不可能为奇数 else if(n%2 && n!=1) return 0; else DFS(2,n); printf("\n"); } return 0; }
相关文章推荐
- HDU 1016 Prime Ring Problem (素数环)(DFS)
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
- HDU_1016 Prime Ring Problem(素数环|经典回朔|DFS)
- hdu-1016 Prime Ring Problem(素数环) DFS解法
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
- HDU 1016 Prime Ring Problem(DFS 素数环问题)
- HDU - 1016 Prime Ring Problem(dfs,素数环)
- hdu 1016 Prime Ring Problem(dfs,素数环)
- HDU 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem DFS(总结了一下模板)
- HDU 1016 Prime Ring Problem --- 经典DFS
- hdu 1016 Prime Ring Problem(DFS)
- 【HDU 1016】Prime Ring Problem —— DFS
- hdu 1016 Prime Ring Problem(DFS)
- [hdu 1016] Prime Ring Problem(剪枝dfs)
- HDU 1016 Prime Ring Problem DFS
- hdu 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem(经典DFS )
- HDU 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem(DFS)