HDU 1016 Prime Ring Problem
2013-07-18 20:22
302 查看
题目大意:给你一个数n(0<n<20)判断是否存在素数环。把所有情况输出
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; #define MAX 20 int a[MAX],n; int vis[MAX]; int isprime[]={0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}; //素数表 //dfs void dfs(int x) { //当x等于n时,说明遍历完成,比较最后一个a[n-1]加上1,是否也是素数,是输出,不是返回,不输出 if(x==n) { if(isprime[a[n-1]+1]==1) { for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return ; } else { //从1开始遍历 for(int i=1;i<n;i++) { if(vis[i]==0&&isprime[i+1+a[x-1]]==1) { //没有访问的标记0,已经访问标记1,如果当前加上前一个为素数,则继续 dfs,不是for a[x]=i+1; vis[i]=1; dfs(x+1); //当访问失败,返回是,把访问标记0 vis[i]=0; } } } } int main() { int k=1; freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF) { memset(vis,0,sizeof(vis)); a[0]=1; printf("Case %d:\n",k++); dfs(1); printf("\n"); } return 0; }
相关文章推荐
- HDU 1016 Prime Ring Problem(dfs)
- Hdu 1016 - Prime Ring Problem
- hdu1016 prime ring problem
- HDU 1016 Prime Ring Problem 简单DFS
- hdu 1016 Prime Ring Problem
- hdu-1016 Prime Ring Problem
- HDU-1016-Prime Ring Problem
- HDU 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem
- hdu-1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- Prime Ring Problem HDU - 1016
- hdu 1016 Prime Ring Problem
- hdu-1016-Prime Ring Problem
- HDU 1016 Prime Ring Problem
- HDU 1016 Prime Ring Problem --- 经典DFS
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem (dfs)
- HDU1016——Prime Ring Problem