HDU 1016 素數環 簡單深搜

#include<stdio.h>
#include<cstring>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;

int dp[100];


int isp(int n)
{
    if(n<=1)
        return 0;

    int i;

    for(i=2; i*i<=n; i++)
    {
        if(n%i==0)
            break;
    }
    if(i*i>n)
        return 1;
    return 0;
}



int n;

int vis[30];
int a[30];

void dfs(int x)
{

    if(x==n+1)
    {
        printf("%d",a[1]);
        for(int i=2; i<=n; i++)
            printf(" %d",a[i]);
        printf("\n");
    }
    else
    {
        for(int i=2; i<=n; i++)
        {

            if(x==n)
            {
                if(vis[i]==0&&isp(a[x-1]+i)==1&&isp(1+i)==1)
                {
                    vis[i]=1;
                    a[x]=i;
                    dfs(x+1);
                    vis[i]=0;
                }
            }

            else  if(vis[i]==0&&isp(a[x-1]+i)==1)
            {
                vis[i]=1;
                a[x]=i;
                dfs(x+1);
                vis[i]=0;

            }

        }
    }

}

int main()
{


    int t=1;
    while(~scanf("%d",&n))
    {
        memset(vis,0,sizeof(vis));
        memset(a,0,sizeof(a));

        printf("Case %d:\n",t++);

        a[1]=1;
        vis[1]=1;

        dfs(2);

        printf("\n");


    }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章