HDU1016 Prime Ring Problem DFS 简单题
2015-04-03 16:38
281 查看
题意:输入n,代表有一个n个节点的环,然后在节点分别填入1到n这n个数,规定,第一个填入的必须是1.
0<n<40
要求填入后满足,任意相邻的2个节点的数之和为素数。
将满足条件的填法按照字典序的顺序小到大依次输出。
其实刚开始做的时候我觉得这道题会做很久的,想好后就开始打了,打着打着发现这道题打好了,有点意外,原来这么简单。
注意回溯,在每次DFS后要记得把状态恢复原样,比如这道题是每次DFS后都要把当前DFS的数字i恢复为vis[i]=false;
先考虑好初始化,结束条件,回溯。
先来一个prime[40],把40里面的素数先为true.
dfs(int cnt ,int dep)
cnt 当前要填入的数
dep 填到了第几个数了
vis[i] i这个数填了没有
ans 存储已经填入的数,填入的数有n个且符合条件就可以开始输入了
View Code
0<n<40
要求填入后满足,任意相邻的2个节点的数之和为素数。
将满足条件的填法按照字典序的顺序小到大依次输出。
其实刚开始做的时候我觉得这道题会做很久的,想好后就开始打了,打着打着发现这道题打好了,有点意外,原来这么简单。
注意回溯,在每次DFS后要记得把状态恢复原样,比如这道题是每次DFS后都要把当前DFS的数字i恢复为vis[i]=false;
先考虑好初始化,结束条件,回溯。
先来一个prime[40],把40里面的素数先为true.
dfs(int cnt ,int dep)
cnt 当前要填入的数
dep 填到了第几个数了
vis[i] i这个数填了没有
ans 存储已经填入的数,填入的数有n个且符合条件就可以开始输入了
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; bool prime[43]; bool vis[25]; int tot,n; int ans[25]; void dfs(int cnt,int dep) { ans[dep]=cnt; vis[cnt]=true; if(dep==n&&prime[cnt+1]) { for(int i=1;i<n;i++) printf("%d ",ans[i]); printf("%d\n",ans ); } for(int i=2;i<=n;i++) { if(!vis[i]&&prime[i+cnt]) { dfs(i,dep+1); vis[i]=false; } } } int main() { memset(prime,true,sizeof(prime)); prime[0]=prime[1]=true; for(int i=2;i<=40;i++) { int m=sqrt(i); for(int j=2;j<=m;j++) { if(i%j==0) { prime[i]=false; break; } } } int cas=0; while(scanf("%d",&n)!=EOF) { cas++; printf("Case %d:\n",cas); memset(vis,false,sizeof(vis)); memset(ans,0,sizeof(ans)); tot=0; dfs(1,1); printf("\n"); } return 0; }
View Code
相关文章推荐
- hdu1016-Prime Ring Problem(简单dfs)
- Hdu1016 Prime Ring Problem 【简单dfs】
- Prime Ring Problem---hdu1016(dfs)
- HDU1016 Prime Ring Problem (DFS)
- HDU1016 Prime Ring Problem 解题报告--dfs
- HDU1016:Prime Ring Problem(DFS)
- hdu Prime Ring Problem (java 简单DFS)
- HDU1016 Prime Ring Problem(DFS)
- HDU1016:Prime Ring Problem(DFS)
- hdu1016 Prime Ring Problem(dfs)
- hdu1016 Prime Ring Problem(回溯dfs)
- HDU1016-Prime Ring Problem(DFS)
- HDU1016:Prime Ring Problem(dfs)
- hdu1016 Prime Ring Problem(dfs)
- HDU1016 - Prime Ring Problem (简单搜索)
- HDU 1016 Prime Ring Problem 简单DFS
- HDU1016 Prime Ring Problem(素数环,深搜DFS)
- HDU1016 Prime Ring Problem(搜索,DFS)
- hdu1016 Prime Ring Problem dfs 素数打表
- hdu1016_Prime_Ring_Problem(经典dfs)