#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int prime[40]={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,1};
int ans[100];
int visit[100];
int num;
void dfs(int n)
{
int i;
if(n==num&&prime[ans[0]+ans[n-1]]==1)
{
for(i=0;i<n-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n-1]);
}
else
{
for(i=2;i<=num;i++)
{
if(!visit[i]&&prime[ans[n-1]+i]==1)
{
visit[i]=1;
ans[n]=i;
dfs(n+1);
visit[i]=0;
}
}
}
}
int main()
{
int i=1;
while(scanf("%d",&num)!=EOF)
{
printf("Case %d:\n",i++);
ans[0]=1;
memset(visit,0,sizeof(visit));
dfs(1);
printf("\n");
}
return 0;
}
hdu1016DFS+回溯
最新推荐文章于 2018-08-04 20:13:25 发布