题意:给出两个四位数的素数,按如下规则变换,使得将第一位数变换成第二位数的花费最少,输出最少值,否则输出0。

  每次只能变换四位数的其中一位数,使得变换后的数也为素数,每次变换都需要1英镑(即使换上的数是以前被换下的)。

思路:若素数a可以按上述规则转化为b,则可以看做a、b直接有一条边。显然,从初始值到目标值的路径上的边数即为花费的

   数目,这样一来,就相当于求最短路径。由于题目只要求最小花费数,所以不需要存储有向图。

  用BFS搜索,每次枚举当前值x所能变换得到的值y,若y满足条件,将y以及从初始值达到当前y值所需要的次数压入队列。

  只要当从队列取出的数值等于目标值,此时的花费即为答案,结束循环。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue> using namespace std; int start,goal,t;//start:初始值,goal:目标值
int prime[];
int vis[];//标记数i是否之前已经被转换过 struct Node{
int num;
int step; //从start变为num所需要的步数
}; //将x的第i位的值改成j
int change(int x,int i,int j){
if(i==)
return x-x%+j;
if(i==)
return (x/)*+x%+j*;
if(i==)
return (x/)*+x%+j*;
if(i==)
return x%+j*;
return ;
} int bfs(int start,int ends){
queue<Node> q;
Node a,b;
vis[start]=;
a.num=start;
a.step=;
q.push(a);
while(!q.empty()){
a=q.front();
q.pop();
//只要a.num等于目标值的话,就退出循环。
//因为不可能有比这花费最少的情况了。
if(a.num==ends){
return a.step;
}
vis[a.num]=;
//枚举
for(int i=;i<=;i++){
for(int j=;j<=;j++){
//若为偶数,直接继续
if(i== && j%==)
continue;
if(i==&&j==)
continue;
int temp=change(a.num,i,j);
if(prime[temp]== || vis[temp])
continue;
b.num=temp;
b.step=a.step+;
q.push(b);
}
} }
return -;
}
//预处理1000~9999的素数
void dealWithPrime(){
memset(prime,,sizeof(prime));
for(int i=;i<;i++){
if(prime[i]){
for(int j=i*i;j<;j+=i){
prime[j]=;
}
}
}
} int main()
{
dealWithPrime();
scanf("%d",&t);
for(int i=;i<=t;i++){
scanf("%d%d",&start,&goal);
memset(vis,,sizeof(vis));
int ans=bfs(start,goal);
if(ans==-)
printf("0\n");
else
printf("%d\n",ans);
}
return ;
}

POJ 3126 Prime Path(BFS求“最短路”)的更多相关文章

  1. poj 3126 Prime Path bfs

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

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

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

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

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

  4. POJ 3126 Prime Path bfs, 水题 难度:0

    题目 http://poj.org/problem?id=3126 题意 多组数据,每组数据有一个起点四位数s, 要变为终点四位数e, 此处s和e都是大于1000的质数,现在要找一个最短的路径把s变为 ...

  5. POJ 3126 Prime Path BFS搜索

    题意:就是找最短的四位数素数路径 分析:然后BFS随便搜一下,复杂度最多是所有的四位素数的个数 #include<cstdio> #include<algorithm> #in ...

  6. POJ 3126 Prime Path (BFS+剪枝)

    题目链接:传送门 题意: 给定两个四位数a.b,每次能够改变a的随意一位.而且确保改变后的a是一个素数. 问最少经过多少次改变a能够变成b. 分析: BFS,每次枚举改变的数,有一个剪枝,就是假设这个 ...

  7. POJ 3126 Prime Path (BFS + 素数筛)

    链接 : Here! 思路 : 素数表 + BFS, 对于每个数字来说, 有四个替换位置, 每个替换位置有10种方案(对于最高位只有9种), 因此直接用 BFS 搜索目标状态即可. 搜索的空间也不大. ...

  8. BFS POJ 3126 Prime Path

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

  9. 双向广搜 POJ 3126 Prime Path

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

随机推荐

  1. 1_1准备工作[wp8特色开发与编程技巧]

    1准备工作 大家好,我是徐文康,今天我要开始带大家玩转windowsphone8 app的开发 在这一套视频中,我将带大家从零开始学习编程.在互联网时代熟悉编程是非常有必要的.差异化竞争将变成趋势,那 ...

  2. HTML5读取本地文件 FileReader API接口

    1.FileReader接口的方法 FileReader接口有4个方法,其中3个用来读取文件,另一个用来中断读取.无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中. Fil ...

  3. 单元测试SimpleTest新手入门

    最近学习单元测试,先用了下PHPunit,结果安装问题一大堆,于是立刻放弃改试simpletest,感觉简单多了.下面列出步骤. 1.下载simpletest(版本1.1.0), http://www ...

  4. 1095. Cars on Campus (30)

    Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out time ...

  5. Bash 快捷键

     生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向 ...

  6. sqlldr使用

    一.写ctl文件 首先,先写一个ctl文件(包含控件信息的文件,这里是oracle数据库的控制文件)文件名:测试.ctl ctl文件例: load datainfile 'd:\xxx.cvs'tru ...

  7. 【js】undefined

    alert(a); function name(parameters) { alert(parameters); } var a; name(a); ---输出结果--- underfind unde ...

  8. 在Visual Studio 2010 中创建类库(dll)

    创建类库 选择"文件"->新建->项目->Visual C# ->类库,输入名称,选择位置,单击确定 浏览解决方案资源管理器,可以看到两个C#类,第一个是A ...

  9. UML中的六大关系

    转自:http://www.cnblogs.com/shengtianlong/archive/2010/10/23/1858953.html UML定义的关系主要有六种:依赖.类属.关联.实现.聚合 ...

  10. 【BZOJ 1006】[HNOI2008]神奇的国度

    Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系 ...