Prime Ring Problem(HDU1016)(A)
2016-10-05 11:20
351 查看
どこでもドア:http://acm.hdu.edu.cn/showproblem.php?pid=1016
一个环放从1到n的n个数,第一个位置一定放1。剩下的满足与之前的数相加为素数,输出所有情况。注意是环,首尾也要合法。
AC CODE:
一个环放从1到n的n个数,第一个位置一定放1。剩下的满足与之前的数相加为素数,输出所有情况。注意是环,首尾也要合法。
AC CODE:
#include<iostream> #include<cstdio> #include<algorithm> #include <cmath> #include <cstring> #include <string> #include<sstream> #include<set> #include <cstdlib> #include<map> using namespace std; const int M=32; int n,ma[M],cnt,ans[M]; int pri[12]={3,5,7,11,13,17,19,23,29,31,37,39};//数据范围小,所有和的素数直接写出来了。 int K=1; bool check(int x,int y) //检验和是否是素数 { x+=y; for(int i=0;i<12;i++){ if(pri[i]==x) return 1; } return 0; } void DFS(int x) { if(cnt>=n) //cnt记录了放入了几个数,全合法放入后return {//ans记录了对应位置放入的数字 if(check(ans[n-1],1)){ cout<<ans[0]; for(int i=1;i<n;i++) cout<<" "<<ans[i]; cout<<endl; } return ; } else { for(int i=1;i<=n;i++) { if(check(i, x)&&!ma[i])//ma来记录访问的状态 { ma[i]=1; ans[cnt]=i; cnt++; DFS(i); //搜索后回溯到这个节点要还原访问之前的状态 ma[i]=0; cnt--; } } } return ; } int main() { while(cin>>n) { cout<<"Case "<<K++<<":"<<endl; memset(ma,0,sizeof(ma)); cnt=1; ans[0]=1; ma[1]=1; DFS(1); cout<<endl; } return 0; }
相关文章推荐
- HDU1016:Prime Ring Problem
- hdu1016 Prime Ring Problem(dfs)
- hdu1016-Prime Ring Problem 素数环
- hdu(hdu1016)Prime Ring Problem
- hdu1016 Prime Ring Problem
- HDU1016:Prime Ring Problem(DFS)
- HDU1016 Prime Ring Problem (经典的深搜)
- HDU1016 Prime Ring Problem
- hdu1016-Prime Ring Problem 素数环
- hdu1016 Prime Ring Problem
- hdu1016 Prime Ring Problem
- HDU1016-Prime Ring Problem(DFS)
- hdu1016 Prime Ring Problem(回溯)
- hdu1016-Prime Ring Problem(回溯法)
- HDU1016:Prime Ring Problem(dfs)
- HDU1016 Prime Ring Problem
- hdu1016 Prime Ring Problem(回溯dfs)
- HDU1016 - Prime Ring Problem - dfs
- HDU1016 Prime Ring Problem(深度优先搜索)
- HDU1016 Prime Ring Problem(素数环,深搜DFS)