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. iOS Size Class使用

    iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了-但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题->各种屏 ...

  2. 【Android-UI】包含多个子View时触发父节点的焦点事件

    今天遇到个问题: 在 LinearLayout 中添加了好几个其他视图 View 之后,点击时不能获得焦点,导致绑定的 onClick 事件不能触发. 解决办法: 对 LinearLayout 添加属 ...

  3. teyi

    $arr=array('haha'=>"苹果");print_r($arr['haha']); $arr=array(0=>"苹果");$arr=a ...

  4. do{...}while(0)的意义和用法(转载)

    linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }while(0) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢? 实 ...

  5. Python学习笔记——基础篇【第五周】——算法(4*4的2维数组和冒泡排序)、时间复杂度

    目录 1.算法基础 2.冒泡排序 3.时间复杂度 (1)时间频度 (2)时间复杂度 4.指数时间 5.常数时间 6.对数时间 7.线性时间 1.算法基础  要求:生成一个4*4的2维数组并将其顺时针旋 ...

  6. vue对比其他框架

    对比其他框架 React React 和 Vue 有许多相似之处,它们都有: 使用 Virtual DOM 提供了响应式(Reactive)和组件化(Composable)的视图组件. 将注意力集中保 ...

  7. [河南省ACM省赛-第三届] 房间安排 (nyoj 168)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=168 分析:找到一天中需要最多的房间即可 #include<iostream> ...

  8. error C3872: “0x3000”: 此字符不允许在标识符中使用

    主要是拷贝的程序问题,有错误的空字符. 0x3000是汉语的空格,也就是全角空格,相当于一个汉字,但你又看不见它. 你知道的,像逗号,有半角(,)和全角(,)之分的,其实空格也有. 0x3000是全角 ...

  9. 清理SharePoint 2010的SQL Server 2008 R2日志数据库的方法!

    //来源:http://www.cnblogs.com/nbpowerboy/p/3380079.html 公司用SharePoint 2010已有三年多的时间了,上BPM项目也有2年多的时间,之前供 ...

  10. centos 设置删除提示

    centos 设置删除.覆盖提示 相信好多用linux的同学都用过cp这个命令来覆盖文件,但是新建的普通用户不会有任何提示,这时候心里就咯噔一下,赶紧看看新文件的是不是传上去了.如果加上提示,是不是就 ...