梦,才是最真的现实

导航

HDU 1016 不一样的DFS

边界判断以及递归写的方式都和之前的不大一样,要多总结才行了

include<stdio.h>

#include<string.h>
int prime[45];
int used[22];
int quan[22];
int n;
void dfs(int);
int main()
{
int t=0;
memset(prime,0,sizeof(prime));
prime[2]=prime[3]=prime[5]=prime[7]=prime[11]=prime[13]=prime[17]=prime[19]=prime[23]=prime[29]=prime[31]=prime[37]=1;
while(scanf("%d",&n)!=EOF)
{
memset(used,0,sizeof(used));
quan[0]=1;
printf("Case %d:\n",++t);
if(n==1)
{
printf("1\n\n");
continue;
}
dfs(1);
putchar('\n');
}
return 0;
}
void dfs(int atemp)
{
int i,j;
if(atemp==n)
{
if(prime[quan[atemp-1]+1])
{
printf("1");
for(j=1;j<atemp;j++)
printf(" %d",quan[j]);
putchar('\n');
}
return ;
}
for(i=2;i<=n;i++)
{
if(!used[i]&&prime[quan[atemp-1]+i])
{
used[i]=1;
quan[atemp]=i;
dfs(atemp+1);
used[i]=0;
}
}
}

posted on 2012-05-18 22:48  梦,才是最真的现实  阅读(149)  评论(0编辑  收藏  举报