题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数。给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤。

利用广搜就能很快解决问题了。还有一个要注意的地方,千位要大于0。例如0373这个数不符合要求。

#include <iostream>
#include <cstdio>
#include <queue>
#include <cmath>
#include <map>
using namespace std; struct Struct
{
int num;
int step;
};
bool Prime(int a) //判断是否为质数
{
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)
return false;
return true;
}
int bfs(int a,int b)
{
queue<Struct>q;
map<int,bool>m; //用map来标记数字是否被访问过
Struct temp,next;
temp.num=a;
temp.step=0;
m[a]=true;
q.push(temp);
while(!q.empty())
{
temp=q.front();
if(temp.num==b)
return temp.step;
q.pop();
for(int i=1;i<10;i++) //变换千位
{
next=temp;
next.num=next.num%1000+i*1000;
if(!m[next.num] && Prime(next.num))
{
m[next.num]=true;
next.step++;
q.push(next);
}
}
int x=100;
for(int i=0;i<3;i++) //变换百位,十位,个位
{
for(int j=0;j<10;j++)
{
next=temp;
next.num=next.num%x+j*x+next.num/(x*10)*(x*10);
if(!m[next.num] && Prime(next.num))
{
m[next.num]=true;
next.step++;
q.push(next);
}
}
x=x/10;
}
}
return -1;
}
int main()
{
//freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
int ans=bfs(a,b);
if(ans!=-1)
printf("%d\n",ans);
else
printf("Impossible\n");
}
return 0;
}

POJ 3126 Prime Path 简单广搜(BFS)的更多相关文章

  1. POJ 3126 Prime Path 素数筛,bfs

    题目: http://poj.org/problem?id=3126 困得不行了,没想到敲完一遍直接就A了,16ms,debug环节都没进行.人品啊. #include <stdio.h> ...

  2. POJ 3126 Prime Path 解题报告(BFS & 双向BFS)

    题目大意:给定一个4位素数,一个目标4位素数.每次变换一位,保证变换后依然是素数,求变换到目标素数的最小步数. 解题报告:直接用最短路. 枚举1000-10000所有素数,如果素数A交换一位可以得到素 ...

  3. 双向广搜 POJ 3126 Prime Path

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

  4. BFS POJ 3126 Prime Path

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

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

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

  6. poj 3126 Prime Path bfs

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

  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: 26475 Accepted: 14555 Descript ...

随机推荐

  1. 第3期:Too many open files以及ulimit的探讨

    第3期:Too many open files以及ulimit的探讨 毛帅 Java.AI.互联网.金融 10 人赞同了该文章 Too many open files是Java常见的异常,通常是由于系 ...

  2. tar cf XXX.tar /tmp /var 日志保存

    tar cf XXX.tar /tmp /var 检测tar tf XXX.tar /tmp /var  

  3. SecureCRT配置自动记录日志

    很多人用SecureCRT时,希望自动记录日志,一个是方便以后查阅,一个是对自己的操作有个记录.可以看看自己做了什么操作,有时甚至可以看看之前是不是犯了什么错,是个很不错的功能. 设置很简单,还可以根 ...

  4. C语言printf-(转自shiney)

    1.调用格式为  printf("<格式化字符串>", <参量表>);   其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另 ...

  5. Django(43)restful接口规范

    restful接口规范   什么是接口规范?接口规范就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据.如何写接口:接口规范是规范化书写接口的,写接口要写url.响应数据 ​  注:如果将 ...

  6. 友盟umeng消息推送直接复制就能用(纯干货)

    一. 单播推送(unicast) 1.1 图 1.2 代码 1 /** 2 * 根据设备的deviceToken, 去给指定的设备推送消息 3 * 4 * @param deviceToken 单个d ...

  7. GEMM与AutoKernel算子优化

    GEMM与AutoKernel算子优化 随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应用,满足产品需求,一个关键的指标就是神经网络模型的推理性能.一大波算法 ...

  8. MegEngine亚线性显存优化

    MegEngine亚线性显存优化 MegEngine经过工程扩展和优化,发展出一套行之有效的加强版亚线性显存优化技术,既可在计算存储资源受限的条件下,轻松训练更深的模型,又可使用更大batch siz ...

  9. jmeter链接mysql数据库

    一.下载与MySQL对应的jar包 1.1.查询MySQL的版本, 命令语句 :SELECT VERSION(); 1.2.MySQL官网下载jar包 ,https://downloads.mysql ...

  10. Qt信号槽机制理解

    1. 信号和槽概述 > 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式(发布-订阅模式).当某个`事件`发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(s ...