标签:
Description
Input
Output
Sample Input
Sample Output
#include <cstdio> #include <string.h> #include <math.h> int num[25], t, n, now; //num记录最后选中的数 bool vis[25], pri[40];//pri[i] = 1表示i为素数,pri[i] = 0表示i不是素数 bool prime(int y) //bool类型的函数,这样就不用定义变量作为返回值了 { for(int i = 2; i <= sqrt(y); i++) { if(y % i == 0) return false; } return true; } void dfs(int now, int t) //已经找到t个数了,第t个数为now,也就是当前数为now,进入dfs也就是找第t+1个数 { if(t == n) //该找第n个数时,看看第n个数和第一个数相加是否是素数,因为组成的是个环,ps:一定记得!!! { if(pri[now+1]) { printf("1"); for(int i = 2; i <= n; i++) printf(" %d", num[i]); printf("\n"); } return; } for(int i = 2; i <= n; i++) { if(vis[i] && pri[i+now]) { vis[i] = 0; num[t+1] = i; dfs(i, t+1); vis[i] = 1; } } } int main() { int cnt = 1; while(~scanf("%d", &n)) { memset(vis, 1, sizeof(vis)); for(int i = 3; i < 40; i++) { if(prime(i)) pri[i] = 1; else pri[i] = 0; } printf("Case %d:\n", cnt++); //当时忘了冒号!!!!!!!!!!!!!!!!!!!!!!!!!!惨啊~~~~ num[1]=1; vis[1] = 0; dfs(1, 1); printf("\n");//当时也忘了每个案例之间也要输出空行~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!!!!!!!嗷~~~ } return 0; }
A - Prime Ring Problem(素数环,深搜,打表)
标签:
原文地址:http://www.cnblogs.com/rain-1/p/4798430.html