思路:宽度优先搜索(BFS算法)

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
using namespace std;
int a,b;
struct node{
int num;
int step;
};
node que[10000];//默认初始化为0
int visit[10000];//默认初始化为0
int prime(int d){
if(d<=1) return 0;
for(int i=2;i<=sqrt(double(d));i++)
if(d%i==0) return 0;
return 1;
}
void bfs(){
int i;
int p1,p2;
p1=0;
que[p1].num=a;
que[p1].step=0;
visit[a]=1;
p2=1;
if(a==b){//考虑 a , b 相等的时候
printf("%d\n",0);
return ;
}
while(p1<p2){
node x=que[p1];
p1++; int unit=x.num%10;//取出个位
int decade=(x.num/10)%10;//取出十位
for(i=1;i<=9;i=i+2){ //枚举个位,保证为奇数(偶数必定不是素数)
int y=(x.num/10)*10+i;
if(y==b) { //如果找到了,直接退出
printf("%d\n",x.step+1);
return ;
}
if(visit[y]==0 &&prime(y)) {
visit[y]=true;
que[p2].num=y;
que[p2].step=x.step+1;
p2++;
}
}
for(i=0;i<=9;i++){ //枚举十位
int y=(x.num/100)*100+i*10+unit;
if(y==b) { //如果找到了,直接退出
printf("%d\n",x.step+1);
return ;
}
if(visit[y]==0 &&prime(y)) {
visit[y]=true;
que[p2].num=y;
que[p2].step=x.step+1;
p2++;
}
}
for(i=0;i<=9;i++){ //枚举百位
int y=(x.num/1000)*1000+i*100+decade*10+unit;
if(y==b) { //如果找到了,直接退出
printf("%d\n",x.step+1);
return ;
}
if(visit[y]==0 &&prime(y)){
visit[y]=true;
que[p2].num=y;
que[p2].step=x.step+1;
p2++;
}
}
for(i=1;i<=9;i++) {//枚举千位,保证千位不为0
int y=i*1000+x.num%1000;
if(y==b) { //如果找到了,直接退出
printf("%d\n",x.step+1);
return ;
}
if(visit[y]==0 &&prime(y)) {
visit[y]=true;
que[p2].num=y;
que[p2].step=x.step+1;
p2++;
}
}
}
printf("Impossible\n");
return;
}
int main(){
int n;
scanf("%d",&n);
while(n--) {
memset(visit,0,sizeof(visit));//不要忘记初始化
scanf("%d%d",&a,&b);
bfs();
}
return 0;
}

下面代码优化了一下判断素数的代码

int prime(int d){
if(d==2) return 1;//特殊情况,偶数2是素数
if( d<=1 || d%2==0 ) return 0;//排除d<=1时以及d为偶数时
for(int i=3;i<=sqrt(double(d));i=i+2)
if(d%i==0) return 0;
return 1;
}

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求“最短路”)

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

  6. POJ 3126 Prime Path BFS搜索

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

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

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

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

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

  9. BFS POJ 3126 Prime Path

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

  10. POJ 3126 Prime Path(素数路径)

    POJ 3126 Prime Path(素数路径) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 The minister ...

随机推荐

  1. HTML DOM节点的增删改查

    上篇博客中,我们已经初步接触了DOM基础,可是我们学习是为了可以更好地应用,今天我们就来看看DOM节点的增删改查. 无论在哪里,我们想要操作一个东西,总是应该先去获得它.那么我们怎么获得呢? HTML ...

  2. Django开发之html交互

    html中用户输入信息,由Django的view.py处理,大致用到了以下几类格式: 1. 文本框 <input type="text" name="vid&quo ...

  3. 仿照ArrayList自己生成的MyList对象

    现在需要自己生成一个list集合,基本雷同ArrayList,不使用API的List接口. 实现如下: MyList的代码: public class MyList<T> { privat ...

  4. ACboy needs your help(简单DP)

    HDU 1712 Problem Description ACboy has N courses this term, and he plans to spend at most M days on ...

  5. Zookeeper数据与存储

    一.前言 前面分析了Zookeeper对请求的处理,本篇博文接着分析Zookeeper中如何对底层数据进行存储,数据存储被分为内存数据存储于磁盘数据存储. 二.数据与存储 2.1 内存数据 Zooke ...

  6. mysql数据库访问授权

    1.进入MySQL服务器 d:\mysql\bin\> mysql -h localhost -u root; 2.赋予任何主机访问数据的权限 mysql> GRANT ALL PRIVI ...

  7. Django 模型系统(model)&ORM--进阶

    QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.all()[ ...

  8. 《编程导论(Java)&#183;1.1.2 颠倒的世界(柏拉图法则)》

    假设你读<编程导论(Java)·1.1.2 颠倒的世界(柏拉图法则)>感到无趣,请尝试评价这个段子. 3. Classes Classes drive me crazy. That mig ...

  9. Java实现微信网页授权

    开发前的准备: 1.需要有一个公众号(我这里用的测试号),拿到AppID和AppSecret: 2.进入公众号开发者中心页配置授权回调域名.具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本 ...

  10. Struts2学习总结(完整版)

    一.搭建struts2环境 1.jar包的导入 主要是到 解压其中的一个工程,得到里面lib下包含的jar包 把这里的所有的jar包拷贝到项目的 WEB-INF目录下的lib文件夹下面. 2.配置st ...