1. 程式人生 > >uva 524(Prime Ring Problem UVA - 524 )

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;
    }   
}