uva 524(Prime Ring Problem UVA - 524 )

dfs练习题,我素数打表的时候j=i了,一直没发现实际上是j=i*i,以后可记住了。还有最后一行不能有空格。。。昏迷了半天

我的代码(紫书上的算法)

#include <bits/stdc++.h>
using namespace std;
int bk[110];
int num[110];
int vis[110];
int n;
void db()
{
    for(int i=2;i*i<=100;i++)
    if(!bk[i])
    for(int j=i*i;j<=100;j+=i)
    bk[j]=1;    
}
void dfs(int cur)
{
    if(cur==n&&!bk[num[n-1]+num[0]])
    {
        for(int i=0;i<n;i++)
        {
            cout<<num[i];
            if(i<n-1)
            cout<<" ";
        }
        cout<<endl; 
    }
    else for(int i=2;i<=n;i++)
    {
        //cout<<vis[i]<<" "<<bk[i+num[cur-1]]<<endl;
        if(!vis[i]&&!bk[i+num[cur-1]])
        {
            num[cur]=i;
            vis[i]=1;
            dfs(cur+1);
            vis[i]=0;
        }
    }
}
main()
{
    db();
    int cas=0;
    num[0]=1;
    int ft=0;
    while(cin>>n)
    {
        if(ft)
        cout<<endl;
        printf("Case %d:\n",++cas);
        dfs(1);
        ft=1;
    }   
} 

猜你喜欢

转载自www.cnblogs.com/baccano-acmer/p/9812967.html