zoukankan      html  css  js  c++  java
  • Uva524

    Prime Ring Problem UVA - 524

    A ring is composed of n (even number) circles as shown in diagram. Put natural numbers 1,2,...,n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. Note: the number of first circle should always be 1. Input n (0 < n ≤ 16) Output The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. You are to write a program that completes above process. Sample Input 6 8 Sample Output Case 1: 1 4 3 2 5 6 1 6 5 2 3 4
    Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <queue>
     4 #include <vector>
     5 #include<string.h>
     6 #include<map>
     7 #include<bits/stdc++.h>
     8 #define LL long long
     9 #define maxn 1005
    10 using namespace std;
    11 int n,ans,tot;
    12 int a[20],check[100];
    13 bool vis[20];
    14 int isprime(int x)
    15 {
    16     for(int i=2;i*i<=x;i++)
    17         if(x%i==0)return 0;
    18             return 1;
    19 }
    20 void dfs(int cur)
    21 {
    22     if(cur==n+1&&check[a[1]+a[n]])
    23     {
    24         for(int i=1;i<=n;i++)
    25             {
    26                 if(i!=1)
    27                 printf(" %d",a[i]);
    28             else
    29                 printf("%d",a[i]);
    30             }
    31         printf("
    ");
    32         return;
    33     }
    34     for(int i=2;i<=n;i++)
    35     {
    36        if(!vis[i]&&check[i+a[cur-1]])
    37        {
    38            a[cur]=i;
    39            vis[i]=1;
    40            dfs(cur+1);
    41            vis[i]=0;
    42        }
    43     }
    44 }
    45 
    46 int main()
    47 {
    48     ans=1;
    49     while(~scanf("%d",&n))
    50     {
    51         if(ans>1)printf("
    ");
    52         memset(vis,0,sizeof vis);
    53         for(int i=2;i<=2*n;i++)
    54             check[i]=isprime(i);
    55         a[1]=1;//题目要求从1开始逆时针排列
    56         vis[1]=1;
    57         printf("Case %d:
    ",ans++);
    58         dfs(2);
    59         //printf("
    ");这样写的话会PE,原因是在最后一次输出时会多空一行
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    Redis使用详细教程
    Web API 强势入门指南
    log4net
    ASP.NET Web API——选择Web API还是WCF
    Hadoop RPC机制
    力扣算法:每日温度
    力扣算法:完全平方数
    力扣算法:岛屿数量
    面试总结二
    面试总结
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/10888029.html
Copyright © 2011-2022 走看看