Prime Path

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 21   Accepted Submission(s) : 18
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
PKU
 
题意:
给出两个四位的素数,要求求出从其中一个变化到另一个数的最少的变化次数,每一次变化只变化四位中的一位,并且变化后的数也要是素数;
思路:
bfs,只不过是40入口的bfs,需要经过剪枝;每一次都枚举个位、十位、百位、千位的所有变化,检验室素数后加入到队列中;
AC代码:

 #include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
int a,b;
struct kf
{
int number;
int sgin;
}ks[];
bool ksgin[]={false}; bool shu(int sg)//判断sg是否是素数
{
if(sg==||sg==)
return true;
else if(sg<=||sg%==)
return false;
else if(sg>)
{
for(int i=;i*i<=sg;i+=)
if(sg%i==)
return false;
return true;
}
} int bfs()
{
int left,right;
kf s;
ks[left=right=].number=a;
ks[right++].sgin=;
ksgin[a]=false;
while(left<right){
s=ks[left++];
if(s.number==b){
cout<<s.sgin<<endl;
return ;
}
int ge=s.number%;
int shi=(s.number/)%;
for(int i=;i<=;i+=){//枚举个位
int y=s.number/*+i;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
for(int i=;i<=;i++){//枚举十位
int y=s.number/*+i*+ge;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
shi*=;
shi+=ge;
for(int i=;i<=;i++){//枚举百位
int y=s.number/*+i*+shi;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
shi=s.number%;
for(int i=;i<=;i++){//千位
int y=i*+shi;
if(y!=s.number&&ksgin[y]&&shu(y)){
ksgin[y]=false;
ks[right].number=y;
ks[right++].sgin=s.sgin+;
}
}
}
cout<<"Impossible"<<endl;
return ;
} int main()
{
// freopen("input.txt","r",stdin);
int test;
cin>>test;
while(test--){
memset(ksgin,true,sizeof(ksgin));
cin>>a>>b;
bfs();
}
}

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

  1. HDU - 1973 - Prime Path (BFS)

    Prime Path Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. 【POJ - 3126】Prime Path(bfs)

    Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...

  3. poj3216 Prime Path(BFS)

    题目传送门  Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Sec ...

  4. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  5. POJ 3126 Prime Path (BFS)

    [题目链接]click here~~ [题目大意]给你n,m各自是素数,求由n到m变化的步骤数,规定每一步仅仅能改变个十百千一位的数,且变化得到的每个数也为素数 [解题思路]和poj 3278类似.b ...

  6. POJ 3126 Prime Path(BFS算法)

    思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...

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

  9. POJ-3126-Prime Path(BFS)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27852   Accepted: 15204 Desc ...

随机推荐

  1. js得到当前页面的url信息方法

    js得到当前页面的url信息方法:http://www.cnblogs.com/zuosong160522/p/5755615.html js获取url传递参数,js获取url?后面的参数:http: ...

  2. centos7安装mariadb后无法启动的问题

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...

  3. Zeppelin使用Spark的yarn-client模式

    Zeppelin版本0.6.2 1. Export SPARK_HOME In conf/zeppelin-env.sh, export SPARK_HOME environment variable ...

  4. centos 日常操作指令

    ls  ls -li 查看当前目录下所有目录 ls -al 查看当前目录下所有目录包括隐藏文件 CD  cd 目录 跳转指定目录 cd ..返回上级目录 cd / 返回根目录 VI  1. 使用vi进 ...

  5. myeclipse6.0安装svn插件

    myeclipse6.0安装svn插件 转载地址:http://www.cnblogs.com/danica/archive/2011/07/12/2104323.html myeclipse6.0安 ...

  6. 利用poi向excle写入数据

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org ...

  7. Jenkins中集成Gcov代码覆盖率报告

    最近终于把gcov代码覆盖报告集成到jenkins中了,总算是完成工作,写篇博客总结下. 我循序渐进地用了三个工具:gcov, lcov, gcovr 这三个工具原理(其实gcovr依赖于GNU的gc ...

  8. jquery 学习笔记(1)

    $就是jquery的一个简写形式 如$('#foo')和jQuery('#foo')是等价的,  $.ajax和  jQuery.ajax是等价的   $符号是jQuery的一个简写形式 window ...

  9. archive log

    1.查看归档模式 2.查看归档文件所在位置 3.完全恢复和不完全恢复 完全恢复:找到问题产生的时间点,在时间点之后的数据也能同时保留 不完全恢复:只能恢复到产生问题的那个时间点的数据状态. 4.非归档 ...

  10. js字符串函数 [http://www.cnblogs.com/qfb620/archive/2011/07/28/2119799.html]

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...