您的位置:首页 > 其它

HDU-1016 dfs

2013-07-25 15:11 211 查看
这题先以为还以为是链表。想多了,只不过是个简单的搜索就可以了。

#include<stdio.h>
#include<math.h>
#include<string.h>
int n;
int p[30],num[30],vis[30];
void prime() //筛选素数O(n)的时间复杂度
{
memset(p,0,sizeof(p));
for(int i=4;i<100;i+=2)
p[i]=1;
int k=(int)sqrt(100.0);
for(int i=3;i<k;i+=2){
if(p[i]) continue;
for(int j=i*i;j<100;j+=2*i)
p[j]=1;
}
}
void dfs(int pos)
{
if(pos==n){
if(!p[num[pos]+1]){
for(int i=1;i<=n;i++)
printf(i==1? "%d":" %d",num[i]);
printf("\n");
}
return ;
}
else
for(int i=2;i<=n;i++)
if(!vis[i]&&!p[num[pos]+i]){
num[pos+1]=i;
vis[i]=1;
dfs(pos+1);
vis[i]=0;
}
}
int main()
{
prime();
num[1]=1;
int cas=1;
while(scanf("%d",&n)!=EOF){
memset(vis,0,sizeof(vis));
printf("Case %d:\n",cas++);
dfs(1);
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dfs