紫书UVA 524

线性筛+DFS回溯

主要是格式错误,注意最后一个数右边没有空格,最后一行后面没有空行。

#include <bits/stdc++.h>

using namespace std;
#define maxn 100
int check[maxn],prime[maxn],tot=0,vis[maxn];
int n;
void shai()
{
    for(int i=2;i<maxn;i++)
    {
        if(!check[i])
            prime[tot++]=i;
        for(int j=0;j<tot;j++)
        {
            if(i*prime[j]>maxn)
                break;
            check[i*prime[j]]=1;
            if(i%prime[j]==0)
                break;
        }
    }
}
int a[maxn];
void dfs(int cur)
{
    if(cur==n&&!check[a[0]+a[n-1]])
    {
        for(int i=0;i<n-1;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<a[n-1]<<endl;
    }
    else
    {
        for(int i=2;i<=n;i++)
        {
            if(!vis[i]&&!check[i+a[cur-1]])
            {
                a[cur]=i;
                vis[i]=1;
                dfs(cur+1);
                vis[i]=0;
            }
        }
    }

}
int main()
{
    memset(check,0,sizeof(check));
    memset(vis,0,sizeof(vis));
    shai();
    a[0]=1;
    int cas=0;
    while(cin>>n)
    {
        if(cas)
           cout<<endl;
        cout<<"Case "<<++cas<<":"<<endl;
        dfs(1); 

    }
    return 0;
}

posted @ 2018-05-04 15:06  MCQ  阅读(105)  评论(0编辑  收藏  举报