HDU 1016 Prime Ring Problem

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


DFS的经典题


#include<iostream>
#include<cstring>
using namespace std;

int ring[25];
bool prime[45];
bool visit[25];

void isprime(int n)
{
    int i,j;
    for(i=2;i<n; i++)
    {
        for(j=2;i*j<n;j++)
        {
             if(prime[i*j])
                prime[i*j]=false;
        }

    }
}
void dfs(int cnt,int n)
{
    int i;
    if(cnt==n && prime[ring[0]+ring[n-1]])          //找出一个符合条件的环
    {

        for(i=0; i<n; i++)
            cout<<ring[i]<<" ";
        cout<<endl;
    }
    else
        for(i=2; i<=n; i++)
        {
            if((!visit[i]) && prime[ring[cnt-1]+i])
            {
                ring[cnt]=i;
                visit[i]=true;
                dfs(cnt+1,n);                       //选i
                visit[i]=false;


            }

        }


}
int main()
{
    int n;
    int i;
    for(i=2;i<45;i++)
        prime[i]=true;
    isprime(45);
    ring[0]=1;
    i=1;
    while(cin>>n)
    {
        memset(visit,0,sizeof(visit));
        cout<<"Case "<<i++<<":"<<endl;
        dfs(1,n);
        cout<<endl;


    }
    return 0;
}


原文地址:https://www.cnblogs.com/frankM/p/4399496.html