Prime Path

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 27852   Accepted: 15204

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

大致题意:

给定两个四位素数a  b,要求把a变换到b

变换的过程要保证  每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位不同,而且每步得到的素数都不能重复。 不得有前导零!

求从a到b最少需要的变换次数。无法变换则输出Impossible

广度优先搜索

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue> using namespace std; const int N = 10000; bool visit[N];
bool Notprime[N];
int dist[N]; void GetNotPrimeVisit ( )
{
int i, j;
for( i=2; i<=N; i++ )
for( j=i<<1; j<=N; j+=i )
Notprime[j] = true;
fill( Notprime, Notprime+1000, true ); //以防万一把前一千个数去掉
} int getnumber[45];
int x;
void SwapNumber( int v )
{
x = 0;
int i, a, b, c, d, n;
a = v / 1000;
b = v / 100 % 10;
c = v % 100 / 10;
d = v % 10;
n = v - a * 1000;
for( i=1; i<10; i++ )
getnumber[x++] = n + i * 1000;
n = v - b * 100;
for( i=0; i<10; i++ )
getnumber[x++] = n + i * 100;
n = v - c * 10;
for( i=0; i<10; i++ )
getnumber[x++] = n + i * 10;
n = v - d;
for( i=0; i<10; i++ )
getnumber[x++] = n + i;
} queue <int> Q;
void BFS ( int a, int b )
{
int i, j, v;
int n = a;
Q.push( n );
visit[n] = true;
while( !Q.empty() )
{
v = Q.front();
if( v == b ) break; Q.pop();
SwapNumber( v ); //得到40个入口
for( j=0; j<x; j++ )
{
i = getnumber[j];
if( !Notprime[i] && !visit[i] ) //使用素数表和visit剪枝
{
Q.push( i );
dist[i] = dist[v] + 1;
visit[i] = true;
}
}
}
if( !Q.empty() ) cout << dist[v] << endl;
else cout << "Impossible" << endl;
} int main()
{
GetNotPrimeVisit(); //得到素数表
int t;
cin >> t;
while( t-- )
{
fill( visit, visit+N, false ); //初始化
fill( dist, dist+N, 0 ); //初始化
while( !Q.empty() ) Q.pop(); //初始化,清空队列
int a, b;
cin >> a >> b;
BFS( a, b ); //广搜
}
return 0;
}

POJ-3126-Prime Path(BFS)的更多相关文章

  1. POJ 3126 Prime Path (BFS)

    [题目链接]click here~~ [题目大意]给你n,m各自是素数,求由n到m变化的步骤数,规定每一步仅仅能改变个十百千一位的数,且变化得到的每个数也为素数 [解题思路]和poj 3278类似.b ...

  2. POJ 3126 Prime Path(BFS算法)

    思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...

  3. POJ 3126 Prime Path (bfs+欧拉线性素数筛)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  4. POJ - 3126 - Prime Path(BFS)

    Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...

  5. POJ 3126 Prime Path(素数路径)

    POJ 3126 Prime Path(素数路径) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 The minister ...

  6. 【POJ - 3126】Prime Path(bfs)

    Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...

  7. poj 3126 Prime Path(搜索专题)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20237   Accepted: 11282 Desc ...

  8. HDU - 1973 - Prime Path (BFS)

    Prime Path Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. Prime Path(BFS)

    Prime Path Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total S ...

  10. (简单) POJ 3126 Prime Path,BFS。

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

随机推荐

  1. qt的exe文件查找依赖的dll

    用qtcreater编译完工程生成的exe文件往往会依赖dll文件.如何一次定位exe文件所以依赖的所有dll文件呢,今天发现了软件叫hap-depends. 截图如下: 用这个软件打开exe文件就会 ...

  2. Crack IDEA

    使用破解补丁 Crack IDEA→在http://idea.lanyus.com/上可以找到最新的破解补丁,下载并放到软件的bin目录下 →更改bin目录下的两个文件:Idea.exe.vmopti ...

  3. fastdfs 清晰简介 有用

    是什么?         FastDFS是一个轻量级分布式文件系统. 能干嘛?         对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等. 在Linux上的安装连 ...

  4. Ajax与Controller的参数交互

    理论 jQuery.ajax( options )中重要参数设置 jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据.通过jquery.ajax与SpringMVC的C ...

  5. 1.在VC编译器下面为什么每个头文件以及源文件都要包含“stdAfx.h”,那么stdAfx.h中到底存放了什么,用来做什么?

    我们知道在windows平台下面很多的文件后缀名中都含有Afx,其实Afx是微软公司的一个技术研发团队名称,vc下的“stdAfx.h”和“stdAfx.cpp”文件就是有他们所研发出来的,为什么要这 ...

  6. code1052 地鼠游戏

    贪心算法,从后往前 来自codevs的题解: 我的纠结思考过程:如果每一秒都没有重复的地鼠出现 那么肯定是一个一个挨着打如果有重复的地鼠 那么要考虑打那个更优 当然是选分值最大的 单纯这样想很合理 但 ...

  7. 一个新手后端需要了解的前端核心知识点之position(一)

    以下内容是基于观看慕课网视频教程总结的知识点,边打代码边总结,符合自己的思维习惯.不是针对新手入门 我做程序的初衷是想做一个网站出来.HTML语言当然重要啊,缺什么就百度什么,很浪费时间,还是好好的打 ...

  8. 如何将.crt的ssl证书文件转换成.pem格式

    如何将.crt的ssl证书文件转换成.pem格式 摘自:https://www.landui.com/help/show-8127 2018-07-04 14:55:41 2158次 准备:有一台安装 ...

  9. Part2_lesson1---arm家族大检阅

    芯片(比如2440.6410.210等等)包含ARM核. 指令结构和ARM核有关系: ARM9对应指令架构版本ARMV4 ARM11对应指令架构版本ARMV6 cortex A8对应指令架构版本ARM ...

  10. response乱码和request乱码

    response乱码 一.浏览器乱码 原因是:浏览器显示编码和文件的数据编码不一致 浏览器显示编码  response.setCharacterEncoding("utf-8"); ...