hdu Prime Ring Problem

简单的dfs,貌似这道题用暴力枚举就可以了,毕竟数据开的是比较小的。

#include"iostream"
#include"algorithm"
#include"stdio.h"
#include"string.h"
#include"string"
#include"vector"
#include"cmath"
#define mx 105
using namespace std;
int q[mx],rear;
bool vis[mx];
int n;
bool prime(int x)
{
    int i;
    if(x==2) return true;
    for(i=3;i<=x/2;i+=2)
    {
        if(x%i==0) break;
    }
    if(i<=x/2) return false;
    return true;
}
void dfs(int x)
{
    int i;
    if(rear==n-1)
    {
       if(prime(1+x))
       {
        cout<<q[0];
        for(i=1;i<n;i++) cout<<' '<<q[i];
        cout<<endl;
        return;
       }
       else return;
    }
    for(i=2;i<=n;i++)
    {
        if(!vis[i]&&(i+x)%2==1&&prime(i+x))
        {
            vis[i]=true;
            q[++rear]=i;
            dfs(i);
            --rear;
            vis[i]=false;
        }
    }
}
int main()
{
    int icase=0;
    while(scanf("%d",&n)==1)
    {
        memset(vis,false,sizeof(vis));
        icase++;
        rear=0;
        q[0]=1;
        vis[1]=true;
        cout<<"Case "<<icase<<":"<<endl;
        dfs(1);
        cout<<endl;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/acm-jing/p/4435324.html