Prime Ring Problem---hdu1016(dfs)

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

这就是一道简单的dfs  但是是我自己想起来的   必须要记录一下

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>

using namespace std;

#define N 50
int a[N];
int vis[N];
int t;

void prime()
{
    memset(a,0,sizeof(a));
    for(int i=2;i<25;i++)
    {
        if(a[i]==0)
        {
            for(int j=i+i;j<N;j=j+i)
            {
                a[j]=1;
            }
        }
    }
}

void dfs(int k,int n,int m)
{
    if(n==1&&a[1+k]==0)
    {
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(vis[j]==i)
                {
                    if(i==1)
                    printf("%d",j);
                    else
                        printf(" %d",j);
                }
            }
        }
        printf("
");
    }
    for(int i=2;i<=m;i++)
    {
        if(a[k+i]==0&&vis[i]==0)
        {
            vis[i]=vis[k]+1;
            dfs(i,n-1,m);
            vis[i]=0;
        }
    }
}

int main()
{
    prime();
    int n;
    t=1;
    while(scanf("%d",&n)!=EOF)
    {
        printf("Case %d:
",t++);
        memset(vis,0,sizeof(vis));
        vis[1]=1;
        dfs(1,n,n);
        printf("
");
    }
    return 0;
}