Prime Path(BFS)
Prime Path
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 21 Accepted Submission(s) : 18

— 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.


#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
int a,b;
struct kf
{
int number;
int sgin;
}ks[];
bool ksgin[]={false}; bool shu(int sg)//判断sg是否是素数
{
if(sg==||sg==)
return true;
else if(sg<=||sg%==)
return false;
else if(sg>)
{
for(int i=;i*i<=sg;i+=)
if(sg%i==)
return false;
return true;
}
} int bfs()
{
int left,right;
kf s;
ks[left=right=].number=a;
ks[right++].sgin=;
ksgin[a]=false;
while(left<right){
s=ks[left++];
if(s.number==b){
cout<<s.sgin<<endl;
return ;
}
int ge=s.number%;
int shi=(s.number/)%;
for(int i=;i<=;i+=){//枚举个位
int y=s.number/*+i;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
for(int i=;i<=;i++){//枚举十位
int y=s.number/*+i*+ge;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
shi*=;
shi+=ge;
for(int i=;i<=;i++){//枚举百位
int y=s.number/*+i*+shi;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
shi=s.number%;
for(int i=;i<=;i++){//千位
int y=i*+shi;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
}
cout<<"Impossible"<<endl;
return ;
} int main()
{
// freopen("input.txt","r",stdin);
int test;
cin>>test;
while(test--){
memset(ksgin,true,sizeof(ksgin));
cin>>a>>b;
bfs();
}
}
Prime Path(BFS)的更多相关文章
- HDU - 1973 - Prime Path (BFS)
Prime Path Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 【POJ - 3126】Prime Path(bfs)
Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...
- poj3216 Prime Path(BFS)
题目传送门 Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Sec ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
- POJ 3126 Prime Path (BFS)
[题目链接]click here~~ [题目大意]给你n,m各自是素数,求由n到m变化的步骤数,规定每一步仅仅能改变个十百千一位的数,且变化得到的每个数也为素数 [解题思路]和poj 3278类似.b ...
- POJ 3126 Prime Path(BFS算法)
思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...
- POJ 3126 Prime Path (bfs+欧拉线性素数筛)
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
- POJ - 3126 - Prime Path(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- POJ-3126-Prime Path(BFS)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27852 Accepted: 15204 Desc ...
随机推荐
- js生成缩略图后上传并利用canvas重绘
function drawCanvasImage(obj,width, callback){ var $canvas = $('<canvas></canvas>'), can ...
- [Poi2015]
[POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...
- 【锋利的Jquery】读书笔记二
一.jquery选择器 基本选择器 层次选择器 过滤选择器 基本过滤 内容过滤 可见性过滤 属性过滤 子元素过滤 first : 获取单个元素 $("div:first&quo ...
- 【ubuntu】开机启动
背景 在ubuntu下做开发,虚拟机要经常开启和关闭,重要的进程需要随机自启,非重要的可以手工启动.比如nginx就需要自启,confluence就没那么重要了. 为了控制哪些程序要自启,哪些程序不要 ...
- 用Karma和Jasmine测试Angular应用
TEST: Before you've written any of the code, you know how you want it to behave. You have a specific ...
- mysql 创建用户与授权、修改密码
mysql版本:5.6.35 1.创建用户 #foo表示你要建立的用户名,后面的123表示密码, #localhost限制在固定地址localhost登陆 CREATE USER foo@localh ...
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试【转】
环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
- C# WebBrowser禁止F5刷新
在用写一个桌面软件的过程中,用到webbrowser实现界面.这时有一个禁止webbrowser通过f5按键进行刷新的要求.本着边做边学的原则,本菜查了一下百度,原来这么简单,代码如下: this.w ...
- @@identity的用法
问题描述:两张表,比如说A表和B表.A表中的id为自增的,B表中的id为外键,插入时不能为空. 解决办法: 用select @@identity得到上一次插入记录时自动产生的ID,将@@identit ...
- Xcode-之Alcatraz
一.说明: Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件.模版以及颜色配置的工具. 二.安装 1.github地址:https://github.com/alca ...