题目链接:http://poj.org/problem?id=3126


Prime Path

Time Limit: 1000MS Memory Limit: 65536K

Total Submissions: 25215 Accepted: 13889

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


解题心得:

  1. 题意就是一个长官的房间号是n(四位数),你每次可以改变n中的一个数,要你改变次数最少将n变成m,并且在改变工程中所有的数字都必须是一个素数,并且都是没有前导零的四位数,如果不能通过这样的改变达到m则输出-1;
  2. 就是一个搜索加素数判断,直接bfs,只不过在入队的时候判断一下是否是一个素数就行了。

#include <algorithm>
#include <stdio.h>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1e4+100;
bool prim[maxn];
int n,m; struct NODE {
int va,step;
NODE() {
va = 0,step = 0;
}
}now2,Next2; void get_prim() {
prim[0] = prim[1] = true;
for(int i=2;i<maxn;i++) {
if(prim[i])
continue;
for(int j=i*2;j<maxn;j+=i) {
prim[j] = true;
}
}
} int bfs() {
bool vis[maxn];
int now[6],Next[6]; memset(vis,0, sizeof(vis));
vis[n] = true;
queue <NODE> qu;
now2.va = n,now2.step = 0;
qu.push(now2); while(!qu.empty()) {
int temp = qu.front().va;
int step = qu.front().step;
qu.pop(); if(temp == m)
return step; int k = 0;
while(k < 4) {
now[k] = temp%10;
temp /= 10;
k++;
} for(int i=0;i<4;i++) {
for(int j=1;j<=9;j++) {
for(int k=0;k<4;k++)
Next[k] = now[k];
Next[i] = (now[i] + j) % 10;
int num = 0;
for(int k=3;k>=0;k--) {
num = num*10 + Next[k];
}
if(!prim[num] && !vis[num] && num >= 1000) {
Next2.step = step+1;
Next2.va = num;
qu.push(Next2);
vis[num] = true;
}
}
}
}
return -1;
} int main() {
int t;
scanf("%d",&t);
get_prim();
while(t--) {
scanf("%d%d",&n,&m);
int ans = bfs();
if(ans != -1)
printf("%d\n",ans);
else
printf("Impossible\n");
}
return 0;
}

POJ:3126-Prime Path的更多相关文章

  1. 双向广搜 POJ 3126 Prime Path

      POJ 3126  Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16204   Accepted ...

  2. poj 3126 Prime Path bfs

    题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

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

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

  4. BFS POJ 3126 Prime Path

    题目传送门 /* 题意:从一个数到另外一个数,每次改变一个数字,且每次是素数 BFS:先预处理1000到9999的素数,简单BFS一下.我没输出Impossible都AC,数据有点弱 */ /**** ...

  5. POJ - 3126 - Prime Path(BFS)

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

  6. POJ 3126 Prime Path(BFS 数字处理)

    意甲冠军  给你两个4位质数a, b  每次你可以改变a个位数,但仍然需要素数的变化  乞讨a有多少次的能力,至少修改成b 基础的bfs  注意数的处理即可了  出队一个数  然后入队全部能够由这个素 ...

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

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

  8. POJ 3126 Prime Path【从一个素数变为另一个素数的最少步数/BFS】

    Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted: 14555 Descript ...

  9. POJ - 3126 Prime Path 素数筛选+BFS

    Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Security 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. JavaSE集合基础总览

    Java集合 Java集合,也称之为容器.基本上你写所有的Java程序,都必须要用到一个包.该API基本都位于java.util工具类包中,是JavaSE中的重中之重.简单可以总结为“1136”,分别 ...

  2. agc027D - Modulo Matrix(构造 黑白染色)

    题意 题目链接 构造一个\(n * n\)的矩阵,要求任意相邻的两个数\(a,b\),使得\(max(a,b) \% min(a,b) \not = 0\) Sol 我的思路: 假设\(mod = 1 ...

  3. POS开发问题 - 多个弹出框的实现

    业务场景如下图: 页面出现提示框:    点击确定,隐藏上面的弹出框, 继续弹出提示:  点击确定隐藏上面的弹出框,继续弹出下面提示: 点击确定隐藏上面的弹出框,继续弹出下面提示: 点击确定,跳转页面 ...

  4. h5:erver-Sent Events

    对于一般的 Web 应用开发,大多数开发人员并不陌生.在 Web 应用中,浏览器和服务器之间使用的是请求 / 响应的交互模式.浏览器发出请求,服务器根据收到的请求来生成相应的响应.浏览器再对收到的响应 ...

  5. The ninth day

    a good egg 可不是好的鸡蛋的意思哦 它等同于 a good person 大好人的意思 eg: We all think he is a good egg. 我们都认为他是一个好人. I t ...

  6. html中的兼容 & 如何对网站的文件和资源进行优化

    一.1.双边距 BUG float引起的  使用display 2.超链接hover 点击后失效  使用正确的书写顺序 link visited hover active (可简单看成由 爱生恨 lo ...

  7. html table 的属性

    表格table th,td 文字顶部对齐 <th valign="top"></th> <td valign="top">& ...

  8. Elmah 数据库脚本

    /* 错误管理工具 SQL代码 */ CREATE TABLE dbo.ELMAH_Error ( ErrorId UNIQUEIDENTIFIER NOT NULL, Application NVA ...

  9. spring-cloud构架微服务(2)-全局配置二

    接上篇,实际项目中,可能会遇到有些配置项,例如:邮件地址.手机号等在服务已经上线之后做了改动(就当会出现这种情况好了).然后你修改了配置信息,就得一个一个去重启对应的服务.spring-全局配置提供了 ...

  10. 新版mysql 5.7的group_by非常不和谐

    sqlalchemy.exc.OperationalError OperationalError: (_mysql_exceptions.OperationalError) (1055, " ...