hdu1016 Prime Ring Problem
一个简单的搜索题目, 从这个问题可以看出, 只要打一个素数表, 然后, 设置一个 该数是否被访问就可以, 一个简单的深搜就可以解决了。
View Code
#include<stdio.h> #include<math.h> #include<string.h> #define maxn 26 int map[maxn], prime[maxn * 2]; int visit[maxn]; int n; void init() { int i, j; memset(prime, 0, sizeof(prime)); for (i = 3; i < 46; i ++) { if (prime[i] == 0) { for (j = i + i; j < 46; j += i) { prime[j] = 1; } } } return; } void print() { int i; printf("1"); for (i = 2; i <= n; i ++) { printf(" %d", map[i]); } printf("\n"); } void dfs(int start) { if (start == n ) { if (prime[1 + map[start]] == 0) print(); return; } int i; for (i = 2; i <= n; i ++) { if (visit[i] == 0 && prime[map[start] + i] == 0) { visit[i] = 1; map[start + 1] = i; dfs(start + 1); visit[i] = 0; } } return; } int main() { init(); int count = 0; while (scanf("%d", &n) != EOF) { printf("Case %d:\n", ++count); memset(visit, 0, sizeof(visit)); map[1] = 1; visit[1] = 1; dfs(1); printf("\n"); } return 0; }