您的位置:首页 > 其它

UVA-542 Prime Ring Problem

2017-05-20 09:55 169 查看
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1000;
int prime[maxn];
int A[maxn];
int vis[maxn];
int is_prime(int x)//生成素数
{
for(int i = 2; i*i <= x; i++) if(x%i == 0) return 0;
return 1;
}
void dfs(int n, int cur)
{
//    for(int i = 1; i <= cur; i++)
//        printf(i==1 ? "%d" : " %d", A[i]);
//    printf("\n");
if(n < cur && prime[A
+1])//判断首尾和是素数
{
for(int i = 1; i <= n; i++)
printf(i==1 ? "%d" : " %d", A[i]);
printf("\n");
return;
}
else
{
for(int i = 2; i <= n; i++)
{
if(prime[A[cur-1]+i] && !vis[i])
//保证相邻的两个数是素数而且没有重复的数
{
vis[i] = 1;
A[cur] = i;
dfs(n, cur+1);
vis[i] = 0;
A[cur] = 0;
}
}
}
}
int main()
{
int n;
for(int i = 2; i <= maxn; i++)
prime[i] = is_prime(i);
//    for(int i = 0; i <= maxn; i++)
//        cout << prime[i] << endl;
int t = 0;
while(scanf("%d", &n) == 1 && n)
{
memset(A, 0, sizeof(A));
memset(vis, 0, sizeof(vis));
if(t) printf("\n");
printf("Case %d:\n", t+1);
A[1] = 1;
dfs(n, 2);
t++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  暴力法