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. 清除IE中Ajax缓存,Chrome不需要

    做项目的时候,会遇到这种情况,通过ajax从后台获取的数据在chrome上显示的是最新的,而在IE上却是以前的数据,这是为什么呢,在我百般调试下终于发现原来是因为IE的ajax缓存的原因,于是加上这段 ...

  2. android 下载图片出现SkImageDecoder::Factory returned null,BitmapFactory.Options压缩

    网上有很多说是因为没有采用HttpClient造成的,尼玛,我改成了HttpClient 请求图片之后还是会出现SkImageDecoder::Factory returned null, 但是直接使 ...

  3. 【Binary Tree Level Order Traversal】cpp

    题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...

  4. Python python 基本语法

    程序1 def buildConnectionString(params): """Build a connection string from a dictionary ...

  5. 【BZOJ】【1211】【HNOI2004】树的计数

    Prufer序列+组合数学 嗯哼~给定每个点的度数!求树的种数!那么很自然的就想到是用prufer序列啦~(不知道prufer序列的……自己再找找资料吧,这里就不放了,可以去做一下BZOJ1005明明 ...

  6. BZOJ3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 531  Solved: 249[Submit][Statu ...

  7. java 邮箱验证公共方法

  8. Leetcode#127 Word Ladder

    原题地址 BFS Word Ladder II的简化版(参见这篇文章) 由于只需要计算步数,所以简单许多. 代码: int ladderLength(string start, string end, ...

  9. 第k短路

    poj 2449 模板题  A*+spfa #include<iostream> #include<cstdio> #include<cstring> #inclu ...

  10. navigationController.navigationBar.titleTextAttributes

    navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor ...