标签:rip turn solution order get begin ogr cout 数字
#include<iostream> #include<string.h> using namespace std; int judge[41]={0, 0,1,1,0,1,0,1,0,0,0, 1,0,1,0,0,0,1,0,1,0, 0,0,1,0,0,0,0,0,1,0, 1,0,0,0,0,0,1,0,0,0 };//素数的打表 int mark[21];//用作标记是否这个数已经使用过 int y[21];//答案数组 int n; void dfs(int a){ //如果所有数字确定,那么判断首尾相加是否也是素数, //若是,则满足条件,输出 if(a==n&&judge[y[1]+y[n]]){ for(int i=1;i<n;i++){ cout<<y[i]<<" "; } cout<<y[n]<<endl; return; } //深搜,不断找出未被标记且与此数相加为素数的下一个数 for(int i=1;i<=n;i++){ if(mark[i]==0&&judge[y[a]+i]){ y[a+1]=i; mark[i]=1; dfs(a+1); mark[i]=0; } } } int main(){ int c=1; while(cin>>n){ cout<<"Case "<<c++<<":"<<endl; memset(y,0,sizeof(y)); memset(mark,0,sizeof(mark)); y[1]=1; mark[1]=1; dfs(1); cout<<endl; } return 0; }
HDU-1016 Prime Ring Problem(DFS深搜+打表)
标签:rip turn solution order get begin ogr cout 数字
原文地址:https://www.cnblogs.com/orangecyh/p/9873675.html