题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1973

Prime Path

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Problem 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
 



Source
 
 
题目大意:给定两个四位素数a  b,要求把a变换到b变换的过程要保证  每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数
     与前一步得到的素数  只能有一个位不同,而且每步得到的素数都不能重复。求从a到b最少需要的变换次数。无法变换则输出Impossible
 
解题思路:打一个素数表,然后基于每个数的每一位bfs搜索即可,具体的可见代码~~~
 
代码如下:
 #include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
int cur, step;
}now, Next;
int vis[], star, finish, prime[] = { , , };
void init(){
for (int i = ; i < ; i++){
if (!prime[i]){
for (int j = ; i*j < ; j++)
prime[i*j] = ;
}
}
}
int bfs(){
queue<node> Q;
vis[star] = ;
now.cur = star, now.step = ;
Q.push(now);
while (!Q.empty()){
int i, j;
char num[];
now = Q.front();
Q.pop();
if (now.cur == finish) return now.step;
for (i = ; i < ; i++){
sprintf(num, "%d", now.cur);
for (j = ; j < ; j++){
if (j == && i == )
continue;
if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j + (num[] - '') * + (num[] - '') * + (num[] - '') * ;
if (!prime[Next.cur] && !vis[Next.cur])
{
Next.step = now.step + ;
vis[Next.cur] = ;
Q.push(Next);
}
}
}
}
return -;
}
int main(){
int t, ans;
cin >> t;
init();
while (t--){
cin >> star >> finish;
memset(vis, , sizeof(vis));
ans = bfs();
if (ans == -) cout << "Impossible\n";
else cout << ans << endl;
}
return ;
}

其实这道题学校OJ(Swust OJ)也有但是坑爹的后台数据变成a+b的后台数据了,Orz~~~(无爱了)

[HDU 1973]--Prime Path(BFS,素数表)的更多相关文章

  1. hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...

  2. hdu 1973 Prime Path

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1973 Prime Path Description The ministers of the cabi ...

  3. HDU - 1973 - Prime Path (BFS)

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

  4. POJ3126 Prime Path (bfs+素数判断)

    POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...

  5. poj 3126 Prime Path( bfs + 素数)

    题目:http://poj.org/problem?id=3126 题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素 ...

  6. POJ 3126 Prime Path (BFS + 素数筛)

    链接 : Here! 思路 : 素数表 + BFS, 对于每个数字来说, 有四个替换位置, 每个替换位置有10种方案(对于最高位只有9种), 因此直接用 BFS 搜索目标状态即可. 搜索的空间也不大. ...

  7. 【BFS】hdu 1973 Prime Path

    题目描述: http://poj.org/problem?id=3414 中文大意: 使用两个锅,盛取定量水. 两个锅的容量和目标水量由用户输入. 允许的操作有:灌满锅.倒光锅内的水.一个锅中的水倒入 ...

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

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

  9. POJ 3216 Prime Path(打表+bfs)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27132   Accepted: 14861 Desc ...

随机推荐

  1. 关于CDH5.2+ 添加hive自定义UDAF函数的方法

  2. idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class

    idea中使用scala运行spark出现: Exception in thread "main" java.lang.NoClassDefFoundError: scala/co ...

  3. mybatis配置方法

    首先导入mybatis-3.1.1.jar包以及Mysql-connector-java-5.1.6-bin.jar包 新建一个数据库 create database mybatis; use myb ...

  4. linux下挂载第二块硬盘

    1.第一步:添加硬盘/新建分区(fdisk) a.查看当前系统所有硬盘及分区情况:fdisk -lb.在指定的硬盘(例:/dev/sda)上创建分区:fdisk /dev/sda , 根据提示进行下一 ...

  5. ID卡

    ID卡全称为身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格式.美国HIDMOTOROLA等各类ID卡.ID卡与磁卡一样,都仅仅 ...

  6. Protel99se教程八:protel99se原理图设计的高级应用

    在我们PCB资源网的前边的protel99se教程当中,我们给大家讲解了如何绘制一个简单的原理图,以及如何将SCH原理图转为PCB,再有就是创建SCH元件,以及如何建立protel99se封库,有了上 ...

  7. Gimp制作圆角透明图片

    用蒙版制作圆角透明图片,步骤如下: 1,用Gimp(2.8版本)打开图片 2,在图层窗口右键当前图层创建蒙版 3,选择蒙版类型黑色(全透明) 4,结果如下 5,用圆角矩形选择工具选择图片,设置圆角半径 ...

  8. Linux虚拟机与外面系统ping不通,或者连不上网

    很多其它具体文档:http://download.csdn.net/download/zml_2015/8843061 非常多人在做linux课程设计的时候,用的linux虚拟机与外面的系统ping不 ...

  9. HDU 2665(Kth number-区间第k大[内存限制+重数])

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  10. Html.raw(转帖)

    Razor 在JS中嵌入后台变量 HTML 中定义全局变量 @{int CurrentUserId =ViewBag.CurrentUserId;} JS中取值方式var CurrentUserId ...