hdu1016较简单的深搜

#include<stdio.h>
int n;
int a[50],b[25],c[25];
void dfs(int j)
{   int i;
	if(j==n&&a[c[n]+1]==1)
	{
		for(i=1;i<=n;i++)
		{
		  if(i==1)printf("%d",c[i]);
		  else printf(" %d",c[i]);
		  
		}
		printf("\n");
	}
	for(i=2;i<=n;i++)//将剩下的未选的数历遍查找符合条件的,都查找过了就会结束
	{
		if(b[i]!=0&&a[c[j]+i]==1) 
		{
			c[j+1]=i;
			b[i]=0;
			dfs(j+1);
			b[i]=i;
		}
	}
}
int main()
{   
   a[1]=a[3]=a[5]=a[7]=a[11]=a[13]=a[17]=a[19]=a[23]=a[29]=a[31]=a[33]=a[37]=a[39]=1;
    int k=0,i;
    for(i=1;i<20;i++)
    b[i]=i;
    c[1]=1;
	while(scanf("%d",&n)!=EOF)
	{
		 k++;
		 printf("Case %d:\n",k);
		 dfs(1);
		 printf("\n");
	}
}

 

posted @ 2013-04-14 15:45  宛如  阅读(129)  评论(0)    收藏  举报