Prime Path素数筛与BFS动态规划
本文共2053个字,预计阅读时间需要6分钟。
BFS
BFS,其英文全称是Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实验里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。(open-closed表)
素数筛
http://www.omegaxyz.com/2019/04/15/e-prime/
问题 POJ
Description
The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices.
— It is a matter of security to change such things every now and then, to keep the enemy in the dark.
— But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know!
— I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old ones on your office door.
— No, it’s not that simple. Suppose that I change the first digit to an 8, then the number will read 8033 which is not a prime!
— I see, being the prime minister you cannot stand having a non-prime number on your door even for a few seconds.
— Correct! So I must invent a scheme for going from 1033 to 8179 by a path of prime numbers where only one digit is changed from one prime to the next prime.Now, the minister of finance, who had been eavesdropping, intervened.
— No unnecessary expenditure, please! I happen to know that the price of a digit is one pound.
— Hmm, in that case I need a computer program to minimize the cost. You don’t know some very cheap software gurus, do you?
— In fact, I do. You see, there is this programming contest going on… Help the prime minister to find the cheapest prime path between any two given four-digit primes! The first digit must be nonzero, of course. Here is a solution in the case above.
1033
1733
3733
3739
3779
8779
8179
The cost of this solution is 6 pounds. Note that the digit 1 which got pasted over in step 2 can not be reused in the last step – a new 1 must be purchased.
Input
One line with a positive number: the number of test cases (at most 100). Then for each test case, one line with two numbers separated by a blank. Both numbers are four-digit primes (without leading zeros).
Output
One line for each case, either with a number stating the minimal cost or containing the word Impossible.
Sample Input
3
1033 8179
1373 8017
1033 1033
Sample Output
6
7
0
问题
从一个素数换到另一个素数,每次只能换一个数字(一位)且换后的每次都是素数。求最小次数?
C++代码
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 10000;bool isprime[maxn + 1];
int dp[maxn + 1];int getNext(int num, int t, int change){//num : 当前的数,t当前的位置,change是改变位的值if(t == 0) return num / 10 * 10 + change; //最低位else if(t == 1) return num /100 * 100 + change * 10 + num % 10;else if(t == 2) return num /1000 * 1000 + change * 100 + num % 100;else return change * 1000 + num % 1000;
}int main(){fill(isprime+2, isprime + maxn, true);for(int i = 2; i <= maxn; i++){if(isprime[i]){for(int j = i * i; j <= maxn; j += i){isprime[j] = false;}}}//打表int T;cin>>T;while(T--){int a, b;cin>>a>>b;fill(dp, dp + maxn, 0x3f);dp[a] = 0; //记录从一个prime跳跃到另一个prime所需的最少次数queue<int> q;q.push(a);while(!q.empty()){int cur = q.front(); //取出队列的第一个q.pop();for(int i = 0; i < 4; i++){for(int j = 0; j < 10; j++){if(i == 3 && j == 0) continue; //int next = getNext(cur, i, j); //替换if(isprime[next] == false || dp[next] <= dp[cur]) continue;// 不是素数不行,如果到next已经有更小的那也不用这个变换路径了dp[next] = dp[cur] + 1;q.push(next);}}}cout<<dp[b]<<endl;}return 0;
}/*
3
1033 8179
1373 8017
1033 1033*/
更多内容访问 omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处
Prime Path素数筛与BFS动态规划相关推荐
- UVA 12101 Prime Path (素数筛+BFS)
题意:给一个四位数的素数,求通过几步变换(一次只能换一个位置的数,且变换过程中只能出现素数)变为目标四位数 分析:素数筛法+BFS,BFS时更换一个数字如果符合条件就加入队列 代码: #include ...
- prime sieve 素数筛
index > Algebra > prime sieve 主要内容 本篇只收录较快的线性筛法,作用就是求 2 到 n 的所有素数,顺便得到判断数组. 单纯求素数,标记所有合数.(常用) ...
- POJ 3126 Prime Path 简单广搜(BFS)
题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...
- POJ 3126 Prime Path(BFS + 素数打表)
题意:给定两个四位素数, 从一个素数到另一个素数,最少用几步,可以一次更改四位中的任意一位,但每次改变都只能是素数. 解题思路:四位数每一位情况有十种情况0-9, 四位共有40种情况, 枚举40种情况 ...
- POJ - 3126 - Prime Path(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- Prime Path(bfs)广度优先搜索
题目描述 The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...
- poj3216 Prime Path(BFS)
题目传送门 Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Sec ...
- poj3126 Prime Path BFS
点击打开链接 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26158 Accepted: 143 ...
- POJ 3126 Prime Path(BFS 数字处理)
意甲冠军 给你两个4位质数a, b 每次你可以改变a个位数,但仍然需要素数的变化 乞讨a有多少次的能力,至少修改成b 基础的bfs 注意数的处理即可了 出队一个数 然后入队全部能够由这个素 ...
- POJ 3126 - Prime Path + Python(BFS)
()原题链接: # 原题:POJ 3126 - Prime Path | 眈眈探求 # 解题思路:https://blog.csdn.net/LYHVOYAGE/article/details/182 ...
最新文章
- 解释个人计算机与多用户系统之间的区别,计算机导论问答题答案
- MVC3学习:将excel文件导入到sql server数据库
- CUDA动态库封装以及调用
- Spring整合Hibernate图文步骤
- TypeScript class 的参数属性 parameter properties
- Appointment over SMS on Windows Mobile
- 高性能mysql_「高性能MySQL」十年阿里架构师推荐,这份高性能MySQL文档送给你
- CCF201812-4 数据中心(100分)【Kruskal算法】
- 飞思卡尔单片机KEA128之ADC学习
- 信号处理中简单实用的方法——对信号进行平滑处理
- 拼音分词器_自动补全
- spring Boot手把手教学(8): 封装统一返回实体类
- Golang reflect.method 使用方法
- 学习和使用Oracle的基本Sql语句
- IoTDB PMC 黄向东成功入选『2021 中国开源先锋 33 人之心尖上的开源人物』,我们记录了他和 IoTDB 的故事...
- 关于大学,关于游戏和游戏开发
- 微信小程序小Demo
- Python批量更改txt文本每行数据
- stm32 IIC ACK与NACK的理解
- XXL-JOB 分布式任务调度 详解
热门文章
- MySQL视图一次踩坑经历
- linux查看ps进程命令,linux ps查看进程命令
- jetty jndi mysql_jetty配置jndi数据源
- 用python画椭圆解释_怎么用python画椭圆?
- canva画图 图片居中裁剪_男士秋裤,一片式补裆款裁剪图分享给大家。天凉该给家人做秋裤啦...
- vivo换手机云服务器,换新手机迁移数据很麻烦?这里两招教你快速迁移,有云服务不用愁...
- EasyExcel导出excel(写)
- 低格硬盘用什么软件_视频号用什么剪辑软件好
- 02. Django基础:Django项目结构
- 死于决斗的数学天才伽罗瓦-人生的有限域