素数环——搜索与回溯

题目描述 Description

从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。

输入输出格式 Input/output

输入格式:
无输入
输出格式:
一个整数(第几号素数环),一列数字(表示这个素数环)

输入输出样例 Sample input/output

样例测试点#1

输入样例:

输出样例:

这里就不演示了(…)

思路:代码很清楚,此处无需讲~~

代码如下:

 1 #include <stdio.h>
 2 #include <math.h>
 3 int a[30]={0};
 4 int b[30]={0};
 5 int zongshu=0;
 6 int k;
 7 int zhishu(int x,int y)//判断质数函数
 8 {
 9     int k=2,i=x+y;
10     while(k<=sqrt(i)&&i%k!=0) k++;
11     if(k>sqrt(i)) return 1;
12        else return 0;
13 }
14 int shuchu()//输出函数
15 {
16     int i;
17     printf("No.%d  ",zongshu++);
18     for(i=0;i<20;i++)
19     {
20         printf("%d ",a[i]);
21     }
22     printf("\n");
23 }
24 int kk(int p)
25 {
26     int i;
27     for(i=1;i<=20;i++)
28     {
29         if((zhishu(a[p-1],i)&&(!b[i]))==1)//符合条件
30         {
31              a[p]=i;
32              b[i]=1;
33              if(p==20)
34                {
35                     if(zhishu(a[20],a[1]))//判断首尾是否能相接,为真,输出
36                  {
37                      shuchu();//是的话,输出即可
38                   }
39               }
40              else kk(p+1);//否则,下一个。。。
41              b[i]=0;//还原场景
42         }
43     }
44 }
45 int main()
46 {
47     kk(1);
48     printf("%d\n",zongshu);
49     return 0;
50 }
时间: 2024-10-16 03:17:07

素数环——搜索与回溯的相关文章

UVA - 524 Prime Ring Problem(素数环)(回溯法)

题意:输入n,把1~n组成个环,相邻两个数之和为素数. 分析:回溯法. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<iostream> #include<s

素数环 南阳acm488(回溯法)

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起见,我们规定每个素数环都从1开始.例如,下图就是6的一个素数环. 输入 有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束. 输出 每组第一行输出对应的Case序号,从1开始. 如果存在满足题意叙述的素数环,从小到大输出. 否则输出No Answer. 样例输入 6 8 3 0 样

UVA 524 素数环 【dfs/回溯法】

Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbers 1,2,3,...,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 alwa

HDU 1016 素数环问题

题目大意: 给定1-n这n个数,组成以1开头的素数环,保证相邻两个数相加均为素数 题目用dfs搜索再回溯,这样碰到不成立的立刻退出递归,就减少了很多步骤,不然暴力来就是n!次复杂度,肯定是超时的 每次添入数据都要判断是否相邻数相加为素数,所以我们可以提前打个素数表,这样使自己判断素数更加方便 1 #include <cstdio> 2 #include <cstring> 3 4 using namespace std; 5 6 #define N 22 7 int n , a[N

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

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 63806    Accepted Submission(s): 27457 Problem Description A ring is compos

搜索与回溯 - 素数环

[题目描述] 从1到20,这20个数摆成一个环,要求相邻的两个数的和是一个素数.求所有可能. [算法分析&&参考代码] 1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int a[21],ans=0; //a数组表示第几个位置的数是啥. 5 bool b[21]={0}; //b数组表示标记,这个数用过没有? 6 bool pd(int,int); 7 void dfs(int);

【DFS】素数环问题

题目: 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列.同一个环应恰好输出一次.n<=16 如输入: 6 输出: 1 4 3 2 5 6 1 6 5 2 3 4 代码: 1 import java.util.Scanner; 2 3 public class 素数环 { 4 5 public static void main(String[] args) { 6 Scanner sc = new Scanner(System.in); 7 int n

素数环解题

<算法竞赛入门经典>这本书确实内容很丰富,但是对于初学者真的不怎么友善.主要的原因在于省略了太多的细节.为什么会有这样的情况呢?我个人是这样理解的,大多数人在给别人介绍一个知识点或者事物的时候,很容易将那些自己觉得比较简单或者基础的东西给省略掉.这种情况不是主观的,潜意识里就这么完成了.例如,我给一个人说,你看这瓶溶液是棕黄色的,至少不是硫酸铜.这里就有一个背景,硫酸铜溶液是蓝色的,我们为什么省略掉这个细节呢?因为我们潜意识里认为,别人也知道,而事实可能并非如此.回到这本书上来,有太多的内容也

nyoj 488 素数环(深搜)

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起见,我们规定每个素数环都从1开始.例如,下图就是6的一个素数环. 输入 有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束. 输出 每组第一行输出对应的Case序号,从1开始. 如果存在满足题意叙述的素数环,从小到大输出. 否则输出No Answer. 样例输入 6 8 3 0 样