BFS --- 素数环
【题目大意】
对话很坑爹,不过很有意思,直接看题干就可以了。
给你两个四位数a和b,现在要你从a经过变换得到b,并且变换的中间的每一位都要是素数,并且相邻两个素数之间只能有一个位不同。
【题目分析】
开始没想到怎么做,以为有什么高深的解法,后来经大神指点说是爆搜就可,思路才打开。
这题没什么陷阱,用爆搜时间复杂度也很低。
怎么爆搜呢?
我们将a的每个位都从0~9列举出来放入队列中,其实就是BFS,只不过是40出口的BFS,但是个位上必须将偶数除掉,顿时就少了一半的搜索量。
因为数据不是很大,所以我们可以用结构体数组来模拟队列。
BFS队列+素数判定
//Memory Time
// 256K 32MS
#include<iostream>
#include<cstring>
using namespace std; struct Node
{
int prime;
int step;
}; bool JudgePrime(int digit)
{
if(digit== || digit==)
return true;
else if(digit<= || digit%==)
return false;
else if(digit>)
{
for(int i=;i*i<=digit;i+=)
if(digit%i==)
return false;
return true;
}
} int a,b;
bool vist[];
Node queue[]; void BFS(void)
{
int i; //temporary
int head,tail;
head=tail=;
queue[head].prime=a;
queue[tail++].step=;
vist[a]=true; while(head<tail)
{
Node x=queue[head++];//出队
if(x.prime==b)
{
cout<<x.step<<endl;
return;
} int unit=x.prime%;
int deca=(x.prime/)%;
for(i=;i<=;i+=)
{
int y=(x.prime/)*+i;
if(y!=x.prime && !vist[y] && JudgePrime(y))
{
vist[y]=true;
queue[tail].prime=y;
queue[tail++].step=x.step+;
}
}
for(i=;i<=;i++)
{
int y=(x.prime/)*+i*+unit;
if(y!=x.prime && !vist[y] && JudgePrime(y))
{
vist[y]=true;
queue[tail].prime=y;
queue[tail++].step=x.step+;
}
}
for(i=;i<=;i++)
{
int y=(x.prime/)*+i*+deca*+unit;
if(y!=x.prime && !vist[y] && JudgePrime(y))
{
vist[y]=true;
queue[tail].prime=y;
queue[tail++].step=x.step+;
}
}
for(i=;i<=;i++)
{
int y=x.prime%+i*;
if(y!=x.prime && !vist[y] && JudgePrime(y))
{
vist[y]=true;
queue[tail].prime=y;
queue[tail++].step=x.step+;
}
}
} cout<<"Impossible"<<endl;
return;
} int main(void)
{
int test;
cin>>test;
while(test--)
{
cin>>a>>b;
memset(vist,false,sizeof(vist));
BFS();
}
return ;
}
BFS --- 素数环的更多相关文章
- nyoj 488 素数环
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简 ...
- nyoj 素数环
算法:搜索 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起见,我们规定每个素数环都从1开始.例如,下图就是6的一个素数环. 输 ...
- nyoj素数环
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简 ...
- ny488 素数环
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起 ...
- DFS搜索题素数环
素数环: 输入整数1,2,3,4,5,···,n组成一个环,使得相邻两个整数之和均为素数. 输出时从整数1开始逆时针排列.同一个环应恰好输出一次.n<=16. Sample: input: 6 ...
- HDU - 1016 Prime Ring Problem 经典素数环
Prime Ring Problem A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., ...
- ACM_素数环(dfs)
Problem Description: 如图所示,环由n个圆组成. 将自然数1,2,...,n分别放入每个圆中,并且两个相邻圆中的数字总和应为素数. 注意:第一个圆圈的数量应该始终为1. Input ...
- EOJ 1114 素数环
题意 一个由自然数 1…n (n≤18) 素数环就是如下图所示,环上任意两个节点上数值之和为素数. 1 / \ 4 2 \ / 3 Input 输入只有一个数 n,表示你需要建立一个 1… ...
- HDU 1016 素数环(dfs + 回溯)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...
随机推荐
- round.606.div2
A. Happy Birthday, Polycarp! 这个题意我确实没有看懂. 沃日,我懂了,我感觉我似乎都能切掉这题. B. Make Them Odd 这个我也能看懂.
- 使用packer 打包nodegui 应用
packer 是nodegui 团队提供的专门用来打包noodegui 应用程序的工具 安装packer yarn 方式安装 yarn add @nodegui/packer 效果 [fsevents ...
- Cogs 513. 八(容斥原理)
八 ★☆ 输入文件:eight.in 输出文件:eight.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的 ...
- Promise对异步编程的贡献以及基本API了解
异步: 核心: 现在运行的部分和将来运行的部分之间的关系 常用方案: 从现在到将来的等待,通常使用一个回调函数在结果返回时得到结果 控制台(因为console族是由宿主环境即游览器实现的)可能会使用异 ...
- Program terminated with signal 6, Aborted. (最后发现是数组越界导致)
外网崩溃现象: 1.多台物理机中的多个进程消失,而且都是场景进程. 2.core文件都很小,看了 ulimit -a 和 cat proc/pid/limits (都很正常.看这个是为了以后core ...
- ssh 可以登录但是 sftp 不能登录的解决办法
将 /etc/ssh/sshd_config 中的 Subsystem sftp /usr/libexec/openssh/sftp-server 改为 Subsystem ...
- 深度排序模型概述(一)Wide&Deep/xDeepFM
本文记录几个在广告和推荐里面rank阶段常用的模型.广告领域机器学习问题的输入其实很大程度了影响了模型的选择,因为输入一般维度非常高,稀疏,同时包含连续性特征和离散型特征.模型即使到现在DeepFM类 ...
- 【转】Android root检测方法总结
一 为什么要进行root检测?出于安全原因,我们的应用程序不建议在已经root的设备上运行,所以需要检测是否设备已经root,以提示用户若继续使用会存在风险. 二 root了会有什么风险?在Linux ...
- Anaconda用conda创建python虚拟环境
Anaconda用conda创建python虚拟环境 一.简介 conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理.包管理与pip的使用类似,环境管理则允许用户方便地安装不 ...
- IDEA @override处标红
报错问题如下 这个是没有导入父类,无法重写父类的方法 创建项目的时候没有使用jdk1.6以上的版本.将版本更正就好了