HDU 1016 DFS

时间:2023-11-10 12:43:44

很简单的深搜 只要看出来是深搜...

注意判断最后一点是否与加一为质数

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
int n;
int ans[30];
bool vis[30];
bool ok[105];
void init()///素数打表
{
memset(ok,true,sizeof(ok));
for(int i=2;i<=100;i++)
{
for(int k=2;k*i<=100;k++)
{
ok[k*i]=false;
}
}
return ;
}
bool check(int a,int b)
{
if(ok[a+b]==true)
return true;
else return false;
}
void dfs(int w,int a)
{
vis[a]=false;
ans[w++]=a;
if(w==n&&check(a,1))
{
for(int i=0;i<w;i++)
{
printf("%d",ans[i]);
if(i==w-1)
printf("\n");
else printf(" ");
}
return ;
}
for(int i=1;i<=n;i++)
{
if(vis[i]==true)
{
if(check(i,a))
{
dfs(w,i);
vis[i]=true;
}
}
}
return ;
}
int main(){
int tt=0;
init();
while(~scanf("%d",&n))
{
tt++;
printf("Case %d:\n",tt);
memset(vis,true,sizeof(vis));
dfs(0,1);
printf("\n");
}
}