题目链接: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. BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )

    最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...

  2. html 表头固定

    <div style="width: 100%; min-width: 300px; padding-right: 10px;"> <table style=&q ...

  3. C# 读书笔记之访问关键字this和base

    this 关键字引用类的当前实例.静态成员方法中不能使用this关键字,this关键字只能在实例构造函数.实例方法或实例访问器中使用. base 关键字用于从派生类中访问基类的成员. 指定创建派生类实 ...

  4. 10,随机等概率的输出m个不重复的数

    今天看到一段代码,可以从0.....n-1中随机等概率的输出m个不重复的数(n远远大于m).遂记录下来. 首先,产生随机数,不免要用到srand,rand函数.先简单介绍下两个函数. 1,void s ...

  5. 帝国cms栏目死变量

    这里为帝国学习者们放出帝国学习者们会用到的栏目死变量,不需要灵动或者万能标签能调用,在任何位置都能使用 栏目路径:<?=$public_r[newsurl].$class_r[1]['class ...

  6. Json.Net系列教程 3.Json.Net序列化和反序列化设置

    原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framewo ...

  7. HTML的标题样式

    标题样式1 <p> <span style=" text-align: center; padding-bottom: 6px; padding-left: 20px; p ...

  8. POJ-1010 Stamps

    [题目描述] 题目大意是:邮票发行商会发行不同面值.不同种类的邮票给集邮爱好者,集邮爱好者有总目标面额,通过不同的邮票组合(总数在4张以内)达到该面值,卖给集邮爱好者.另外,发行商发行的邮票面值最多2 ...

  9. GLSL中的各种变量总结

    1.uint CreateShader(enum type) : 创建空的shader object; type: VERTEX_SHADER, 2.void ShaderSource(uint sh ...

  10. IIS 7关闭应用程序池自动回收设置

    在web应用程序中经常有一些任务就需要在Global文件启用一个线程来实现, 那假设我们在自己的ASP.NET应用程序中加入了Quartz.NET框架,并且配置等等都OK了. 这个站点访问量很少,现在 ...