本文主要是介绍HDU 1016 Prime Ring Problem 素数环【DFS】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1016
题意:
给定一个数n,输出 从1到n的所有可以组成素数环的序列,每个素数环按字典序,同一个素数环再按顺逆时针输出。
分析:暂无
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
using namespace std;
int a[25],v[25],time,n;
int prime[25]={1,1};/// 不是是素数的定义为1
void isprime()
{for(int i=2;i<=10;i++)if(prime[i]==0)for(int j=2*i;j<=25;j+=i){prime[j]=1;///不是素数的标记为1}
}
void dfs(int step)
{if(step==n+1&&prime[a[1]+a[n]]==0)///搜索结束的条件{for(int i=1;i<n;i++){printf("%d ",a[i]);}printf("%d\n",a[n]);return ;}for(int i=2;i<=n;i++){if(v[i]==0&&prime[i+a[step-1]]==0){a[step]=i;///给素数环填数v[i]=1;///标记走过的dfs(step+1);v[i]=0;}}return ;}int main()
{a[1]=1;isprime();while(~scanf("%d",&n)){printf("Case %d:\n",++time);dfs(2);printf("\n");}return 0;
}
这篇关于HDU 1016 Prime Ring Problem 素数环【DFS】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!