Problem Description

A ring is compose of n circles as shown in diagram. Put natural number 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 < 20).

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. Print solutions in lexicographical order.

You are to write a program that completes above process.

Print a blank line after each case.

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

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
int Case = 0;
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int a[] = new int[n];
//初始数组1-n
int color[] = new int[n];
//判断数字是否已经存在
int prant[] = new int[n];
//输出数据排序
int count =0;//计数器
for(int i=0;i<n;i++){
a[i]=i+1;
color[i] = -1;
}//初始化数据 Case++;
System.out.println("Case "+(Case)+":"); dfs(a,color,prant,count,0);
System.out.println(); }
} private static void dfs(int[] a, int[] color, int[] prant, int count,int m) {
//System.out.println(count);
count++;//计数器加1
if(count == a.length&&p(prant[0],a[m])){
//注意第一个数和最后一个数相加的和也必须为素数
prant[count-1]=a[m];
for(int i=0;i<a.length-1;i++){
System.out.print(prant[i]+" ");
}
System.out.println(prant[a.length-1]); //return ;
} for(int i=0;i<a.length;i++){
color[m] =1;
if(p(a[m],a[i])&&color[i]==-1){
color[i]=1;
prant[count-1]=a[m]; dfs(a,color,prant,count,i); color[i]=-1; } } } //判断是不是素数
private static boolean p(int i, int j) {
int sum = i+j;
for(int a=2;a*a<=sum;a++){
if(sum%a==0){
return false;
}
}
return true;
} }

C语言:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std; int n;
int df[21];
int t=1;
int m[21];
int mi;
bool pn(int x,int y){//判断素数
for(int i=2;i*i<=x+y;i++){
if((x+y)%i==0){
return false;
}
}
return true;
} void dfs(int x){
if(mi==n&&pn(m[1],m[n])){
for(int i=1;i<n;i++){
printf("%d ",m[i]);
}
printf("%d\n",m[n]);
return;
} for(int i=2;i<=n;i++){
if(df[i]==0&&pn(x,i)){
df[x]=1;
mi++;//当前小球数
m[mi]=i;
dfs(i);
df[x]=0;
mi--;//必须减一
}
} } int main()
{
while(~scanf("%d",&n)){
printf("Case %d:\n",t);
t++;
memset(df,0,sizeof(df));
mi=1;
m[mi]=1;
dfs(1);
printf("\n");
}
return 0;
}

HDOJ 1016 Prime Ring Problem素数环【深搜】的更多相关文章

  1. Hdu 1016 Prime Ring Problem (素数环经典dfs)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. 题目1459:Prime ring problem(素数环问题——递归算法)

    题目链接:http://ac.jobdu.com/problem.php?pid=1459 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  3. hdoj 1016 Prime Ring Problem

    Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...

  4. hdoj - 1258 Sum It Up && hdoj - 1016 Prime Ring Problem (简单dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1258 关键点就是一次递归里面一样的数字只能选一次. #include <cstdio> #inclu ...

  5. HDU 1016 Prime Ring Problem(素数环问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  6. HDOJ(HDU).1016 Prime Ring Problem (DFS)

    HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  7. [HDU 1016]--Prime Ring Problem(回溯)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  8. hdu 1016 Prime Ring Problem(dfs)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu 1016 Prime Ring Problem(DFS)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. jq實現網頁個性title

    <!DOCTYPE html> <html content="text/html; charset=UTF-8"> <title>tooltip ...

  2. Java 8 Features – The ULTIMATE Guide--reference

    Now, it is time to gather all the major Java 8 features under one reference post for your reading pl ...

  3. ios中xib的使用介绍

    ios中Xib的使用 ios中xib的使用 Nib files are the quintessential(典型的) resource type used to create iOS and Mac ...

  4. java 良好开发规范

    使用继承时,不要为了部分功能而去继承,老子就是这么傲娇! 2.  在类中,无参构造函数尽量写出来,可以减少很多不必要的错误. 因为一旦类中你 写出了带参的构造函数,那么系统就不会自动给出无参的构造函数 ...

  5. Linux磁盘管理:LVM逻辑卷的创建及使用

    一.创建LVM逻辑卷 事先添加了三块虚拟物理磁盘/dev/sdb 1G, /dev/sdc 2G, /dev/sdd 3G 使用fdisk –l命令查看: [root@localhost ~]# fd ...

  6. c# 网站发布

    .net 网站发布简单步骤: 1.选择需要发布的网站,右击->发布 1)配置文件:可以任意新建文件配置名 2)连接: 发布方法选择系统文件:选择目标位置,任意新建一个位置即可. 3)设置:选择D ...

  7. Linux 抓取网站命令

    wget -m -e robots=off -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) Gecko/200 ...

  8. 抓取锁的sql语句-第二次修改

    CREATE OR REPLACE PROCEDURE SOLVE_LOCK AS V_SQL VARCHAR2(3000);  --定义 v_sql 接受抓取锁的sql语句 CUR_LOCK SYS ...

  9. AutoLayout适配

    http://www.raywenderlich.com/113768/adaptive-layout-tutorial-in-ios-9-getting-started iOS布局和屏幕适配的一点总 ...

  10. 【USACO 3.1.3】丑数

    [描述] 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它).这是 ...