标签:搜索与回溯

题目:

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

算法分析:

非常明显,这是一道回溯的题目。从1开始,每个空位有20种可能,只要填进去的数合法:与前面的数不相同;与左边相邻的数的和是一个素数。第20个数还要判断和第1个数的和是否素数。

算法流程:

1、数据初始化;

2、递归填数:判断第i个数填入是否合法;

A、如果合法:填数;判断是否到达目标(20个已填完):是,打印结果;不是,递归填下一个;

B、如果不合法:选择下一种可能;

题解:

#include <iostream>
#include <cmath>
using namespace std; bool b[21]={0};
int a[21]={0};
int search(int);
int print();
bool pd(int,int);
int main()
{
search(1);
return 0;
}
int search(int t)
{
for (int i=1;i<=20;i++)
if(pd(a[t-1],i)&&(!b[i]))
{
a[t]=i;
b[i]=1;
if(t==20)
{
if(pd(a[20],a[1]))
print();
}
else search(t+1);
b[i]=0; }
}
int print()
{
for(int j=1;j<=20;j++)
cout<<a[j]<<' ';
cout<<endl;
}
bool pd(int x,int y)
{
int k=2;
while(k<=sqrt(x+y)&&(x+y)%k!=0)k++;
if(k>sqrt(x+y))return 1;
else return 0;
}

知识点:

  • 素数筛法
void ifprime()
{ //打表法将1到40之间所有的素数用1标记放入数组中对应位置,其余数用0标记
for(int i=2;i<40;i++)
prime[i]=1;
prime[1]=0; for(int i=2;i<40;i++)
for(int j=2*i;j<=40;j+=i)
prime[j]=0;
}
  • 素数定义法
bool pd(int x,int y)
{
int k=2;
while(k<=sqrt(x+y)&&(x+y)%k!=0)k++;
if(k>sqrt(x+y))return 1;
else return 0;
}

错解:

忘记了1到20不能重复,搜索写的也有问题

//1到20素数环
#include <iostream>
using namespace std;
int a[21];
int nas[40];
int check()
{ //素数筛
for(int i=2;i<=40;i++)nas[i]=1;
nas[1]=0;
for(int i=2;i<40;i++)
for(int j=2*i;j<40;j+=i)
{
nas[j]=0;
}
} int search(int k)
{ if(k==20)
{ for(int i=1;i<=20;i++)
if(nas[a[1]+a[20]])
for(int j=1;j<=20;j++)
cout<<a[j];
}
for(int i=1;i<=20;i++)
{
if(nas[a[k]+i])
{
a[k+1]=i;
search(k+1);
}
a[k+1]=0;
search(k);
}
}
int main()
{ check();
for(int i=1;i<=20;i++)
{
a[1]=i;
search(1);
for(int j=1;j<=20;j++)a[j]=0;
} return 0;
}

洛谷UVA524 素数环 Prime Ring Problem的更多相关文章

  1. UVA524 素数环 Prime Ring Problem

    题目OJ地址: https://www.luogu.org/problemnew/show/UVA524 hdu oj 1016:  https://vjudge.net/problem/HDU-10 ...

  2. 素数环 Primg Ring Problem

    素数环 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/C 题意: 输入正整数n,把整数1~n组成一个 ...

  3. HDU - 1016 Prime Ring Problem 经典素数环

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

  4. Prime Ring Problem素数环(HDU1016)

    Prime Ring Problem 思路:先看成一条链,往里头填数,满足任意相邻两数和为质数(这可以打表预处理出40以内的所有质数,扩展的时候枚举),填完了后检查首尾是否满足条件.字典序可以采用扩展 ...

  5. uva 524 prime ring problem——yhx

      Prime Ring Problem  A ring is composed of n (even number) circles as shown in diagram. Put natural ...

  6. hdu 1016 Prime Ring Problem(DFS)

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

  7. Prime Ring Problem + nyoj 素数环 + Oil Deposits + Red and Black

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

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

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

  9. Prime Ring Problem

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

随机推荐

  1. java返回树形结构的正确姿势

    业务场景 通常我们前端需要一个树形的导航菜单或者分类菜单,如后台权限管理中的权限树,亦或者下面例子中商城系统的商品分类多级菜单(一般为三级菜单) 数据库设计 数据库设计,采用parentId来指向自己 ...

  2. 04_Python中的35个关键字

    查看Python中的关键字 import keyword print(keyword.kwlist)  # 返回一个包含Python关键字的列表     """执行结果 ...

  3. C008:输入显示日期

    代码: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int day,month,year; do{ pri ...

  4. python中使用mock模块返回数据

    mock是辅助单元测试的一个模块.它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言. mock在python3中已经被集成到了unittest单元测试框架中,所以,可以直接使用. m ...

  5. 安装模块中出现的问题:不是内部或外部命令、pip 命令不存在、Unknown or unsupported command 'install'

    #cmd下python.pip不是内部或外部命令——表示环境变量没有加# path中新增1.python的安装目录# 2.python下scripts的目录 #提示 pip 命令不存在——表示环境变量 ...

  6. python模块之----subprocess

    例子 >>> subprocess.getstatusoutput('pwd')(0, '/home/ronny')>>> subprocess.getoutput ...

  7. xmake v2.3.7 发布, 新增 tinyc 和 emscripten 工具链支持

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

  8. [LeetCode]23. 合并K个排序链表(优先队列;分治待做)

    题目 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1 ...

  9. 《Redis内存数据库》Redis数据类型和基本操作

    前言 redis 有多种数据类型,兼容应用的开发. 说明 第一种数据类型:string(字符串) set key value     -- 设置key和key对应的value值 get key    ...

  10. 云计算openstack——高可以负载均衡(14)

    一.云平台概要 1.本openstack云平台使用开源软件Openstack Ocata版…… 2.OpenStack 部署环境中,各节点可以分为几类: Cloud Controller Node ( ...