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