Prime Path

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

题目大意:

    给定两个4位素数a和b,输出从a变到b需要几次。变换规则如下:

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

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

解题思路:

    简单的BFS,注意千位不能为0即可。

Code:

 /*************************************************************************
> File Name: poj3126.cpp
> Author: Enumz
> Mail: 369372123@qq.com
> Created Time: 2014年10月20日 星期一 16时46分57秒
************************************************************************/ #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<list>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#define MAXN 30000
using namespace std;
queue <int> q;
int dis[MAXN];
bool vis[MAXN],a[MAXN];
void init_prime()
{
a[]=a[]=;
for (int i=;i<=;i++)
if (!a[i])
for (int j=*i;j<=;j+=i)
a[j]=;
}
int bfs(int k1,int k2)
{
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
while (!q.empty()) q.pop();
q.push(k1);
dis[k1]=,vis[k1]=;
while (!q.empty())
{
int tmp=q.front();
q.pop();
if (tmp==k2) return dis[tmp];
if (tmp>||tmp<) continue;
int tmp1=tmp-tmp%;
int tmp2=tmp-tmp%+tmp%;
int tmp3=tmp-tmp%+tmp%;
int tmp4=tmp%;
for (int i=;i<=;i+=)
if (!a[tmp1+i]&&!vis[tmp1+i])
{
dis[tmp1+i]=dis[tmp]+;
q.push(tmp1+i);
vis[tmp1+i]=;
}
for (int i=;i<=;i+=)
if (!a[tmp2+i]&&!vis[tmp2+i])
{
dis[tmp2+i]=dis[tmp]+;
q.push(tmp2+i);
vis[tmp2+i]=;
}
for (int i=;i<=;i+=)
if (!a[tmp3+i]&&!vis[tmp3+i])
{
dis[tmp3+i]=dis[tmp]+;
q.push(tmp3+i);
vis[tmp3+i]=;
}
for (int i=;i<=;i+=)
if (!a[tmp4+i]&&!vis[tmp4+i])
{
dis[tmp4+i]=dis[tmp]+;
q.push(tmp4+i);
vis[tmp4+i]=;
}
} return -;
}
int main()
{
init_prime();
int T;
cin>>T;
while (T--)
{
int k1,k2;
cin>>k1>>k2;
int ret=bfs(k1,k2);
if (ret!=-)
printf("%d\n",ret);
else
printf("Impossible\n");
}
return ;
}

POJ2126——Prime Path(BFS)的更多相关文章

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

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

  2. [HDU 1973]--Prime Path(BFS,素数表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1973 Prime Path Time Limit: 5000/1000 MS (Java/Others ...

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

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

  4. poj 3126 Prime Path bfs

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

  5. POJ3126 Prime Path —— BFS + 素数表

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

  6. [POJ]P3126 Prime Path[BFS]

    [POJ]P3126 Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35230   Accepted: ...

  7. CD0J/POJ 851/3126 方老师与素数/Prime Path BFS

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9982   Accepted: 5724 Descri ...

  8. POJ 3126 Prime Path(BFS求“最短路”)

    题意:给出两个四位数的素数,按如下规则变换,使得将第一位数变换成第二位数的花费最少,输出最少值,否则输出0. 每次只能变换四位数的其中一位数,使得变换后的数也为素数,每次变换都需要1英镑(即使换上的数 ...

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

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

随机推荐

  1. Log4Net学习【二】

    Log4Net结构详解 当我们在描述为系统做日志这个动作的时候,实际上描述了3个点:做日志,其实就是在规定,在什么地方 用什么日志记录器 以什么样的格式做日志.把三个最重要的点抽取出来,即什么地方,日 ...

  2. Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  3. 6、android开发中遇到的bug整理

    1.使用actionProvider时出现的问题 bug复现: 解决方案: //import android.support.v4.view.ActionProvider; import androi ...

  4. Geo-Fence

    转自:http://blog.jobbole.com/86633/ 地理围栏(Geo-fencing)是LBS的一种应用,就是用一个虚拟的栅栏围出一个虚拟地理边界,当手机进入.离开某个特定地理区域,或 ...

  5. .NET Framework 4.5、4.5.1 和 4.5.2 中的新增功能

    .NET Framework 4.5.4.5.1 和 4.5.2 中的新增功能 https://msdn.microsoft.com/zh-cn/library/ms171868.aspx

  6. Leetcode#59 Spiral Matrix II

    原题地址 相比于Spiral Matrix(参见这篇文章)要简单一些,因为是方阵,所以代码简洁一些. 注意当n是奇数的时候,中心小块要单独赋值(代码21行) 代码: vector<vector& ...

  7. Leetcode#57 Insert Interval

    原题地址 遍历每个区间intervals[i]: 如果intervals[i]在newInterval的左边,且没有交集,把intervals[i]插入result 如果intervals[i]在ne ...

  8. phonegap上传以及下载图片

    在phonegap中,有时我们需要从服务器下载图片以及上传图片,这个时候可以用到官方提供的一个插件:FileTransfer 首先通过命令添加插件: cordova plugin add org.ap ...

  9. MAC下搭建web开发环境

    具体做法,参照此链接:http://mallinson.ca/osx-web-development/ Mac系统本身自带apache和PHP,MySQL可以安装也可以不安装 web开发的IDE可以是 ...

  10. 连接ACCESS 数据库不能使用 '';文件已在使用中。

    错误类型:  Microsoft JET Database Engine (0x80004005)  不能使用 '':文件已在使用中. 对数据库的操作完之后,要 conn.close() 错误原因:解 ...