HDU 1016 Prime Ring Problem(DFS回溯+素数判断)

HDU 1016 Prime Ring Problem(DFS回溯+素数判断)

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

题意:

        给你一个n,要求输出所有由1,2,3…n构成的素数环。所谓素数环就是该环中的任意相邻两个数的和是一个素数。且按字典序从小到大输出。

分析:

        本题在刘汝佳的入门经典里也有。

        首先利用素数筛选法求出100以内的所有素数。

        然后用dfs从小到大依次选取所有数字来构成环,注意当选完最后一个数的时候要用它和1(首位的数)判断是否他们的和是一个素数。

AC代码:

#include
#include
using namespace std;
const int maxn=100;
int n;
int prime[maxn];//prime[i]=0表i为素数,=1表i非素数
int ans[maxn],vis[maxn];
void get_prime()
{
    memset(prime,0,sizeof(prime));
    for(int i=2;i


你可能感兴趣的:(ACM--题解汇总,★★,practice,again,图论--DFS)