HDU1016-素数环 暴力深搜


#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

int prime[42]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1};
int vis[20],ans[20];
int n;
void dfs(int cnt)
{
int i;
if(cnt==n)//这里只有n个
{
if(prime[ans[n]+1])//处理最后一个
{
for(i=1;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[i]);
}
return ;
}
for(i=1;i<=n;i++)
{
ans[cnt+1]=i;
if(!vis[i]&&prime[ans[cnt]+ans[cnt+1]])
{
vis[i]=1;
dfs(cnt+1);//递归深搜下一个
vis[i]=0;
}
}
}
int main()
{

int i,cnt;
int t=1;
while(cin>>n)
{
printf("Case %d:\n",t++);
memset(vis,0,sizeof(vis));
ans[1]=1;
vis[1]=1;
cnt=1;
dfs(1);
printf("\n");
}
return 0;
}