本文主要是介绍HDU-1016 dfs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这题先以为还以为是链表。想多了,只不过是个简单的搜索就可以了。
#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 ;}elsefor(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");}
}
这篇关于HDU-1016 dfs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!