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