题目链接: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. mysql数据迁移

    使用mysqldump mysqldump -host=host1 -uroot -p123456 -opt sourceDb| mysql -host=host2 -uroot -p123 -C t ...

  2. PHP新闻系统开发流程

    PHP新闻系统开发流程一.系统总体设计 (一)系统功能描述和功能模块划分 (二)系统流程分析 (三)系统所用文件二.数据库设计 (一)创建数据库 (二)设计表结构三.新闻发布模块开发 (一)新闻首页 ...

  3. 怎么给没链接的flash加超链接

    最近开始准备设计一个广告条,本想用阿里妈妈的的banner marker来设计,却遗憾的发现,banner marker已经实行收费模式了. 我不得不启用另一款在线banner生成工具,百度旗下的&q ...

  4. IC卡,ID卡,M1卡,射频卡

    一般把可读可写,频率是13.56MHz的射频卡称为IC卡,IC卡可以写入数据, 只能读,频率是125KHz的射频卡称为ID卡, M1卡是NXP公司的S50卡的一种叫法,国内的复旦F08,达华的TKS5 ...

  5. 如何给变量取个简短且无歧义的名字(转) good

    湾区日报上分享的一篇文章,文章的作者在Google设计Dart语言,就变量命名方面给了4点建议,文中也列出了好变量名.坏变量名的对比.不管作者的看法与你实际中的命名习惯是否一致,看完这篇文章,相信可以 ...

  6. IOS学习之路二十四(UIImageView 加载gif图片)

    UIImageView 怎样加载一个gif图片我还不知道(会的大神请指教),不过可以通过加载不同的图片实现gif效果 代码如下: UIImageView* animatedImageView = [[ ...

  7. 非常可乐(bfs)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. Failed to upgrade Oracle Cluster Registry configuration(root.sh)

        近期在给客户基于Suse 11 sp3安装Oracle 10g RAC,在安装完clusterware运行/u01/app/crs/root.sh时收到错误提示.Failed to upgra ...

  9. Android4.3模拟器界面中右侧菜单按钮无法使用问题解决办法

    开发环境:笔记本电脑Windows2008+MyEclipse 10+Android4.3 问题描述:运行或者调试Android项目时,发现模拟器中右侧Menu按钮无法点击,截图如下: 查看在Andr ...

  10. STL algorithm算法mismatch(37)

    mismatch原型: std::mismatch equality (1) template <class InputIterator1, class InputIterator2> p ...