hdu 1016 Prime Ring Problem 深搜

输入n。从1到n的数组成一个环,环相邻的两个数之和为质数。输出所有的这种环。
本人用深搜递归水过
250ms

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
using namespace std;
int n;
int ans[25],p[50],flag[25];
void dfs(int step)
{
    int i;
    if(step==n)
    {
        if(p[ans[0]+ans[step-1]])
        {
            printf("%d",ans[0]);
            for(i=1;i<n;i++)
            printf(" %d",ans[i]);
            printf("\n");
        }
        return;
    }
    for(i=1;i<=n;i++)
    {
        ans[step]=i;
        if(!flag[i]&&p[ans[step]+ans[step-1]])
        {
            flag[i]=1;
            dfs(step+1);
            flag[i]=0;
        }
    }
}
int main()
{
    int i,j,cas=1;
    for(i=0;i<45;i++)
    p[i]=i;
    for(i=2;i<45;i++)
    if(p[i])
    for(j=i+1;j<45;j++)
    if(!(p[j]%p[i]))
    p[j]=0;
    while(scanf("%d",&n)!=EOF)
    {
            printf("Case %d:\n",cas++);
            if(n==1||n%2==0)
            {
            memset(flag,0,sizeof(flag));
            ans[0]=1;
            flag[1]=1;
            dfs(1);
        }
        printf("\n");
    }
    return 0;
}
   

        
        
posted @ 2011-03-24 11:24  CoderZhuang  阅读(109)  评论(0编辑  收藏  举报