Prime Path(bfs)
http://poj.org/problem?id=3126
题意:给两个四位数n,m,将n变成m需要多少步,要求每次只能改变n的某一位数,即改变后的数与改变前的数只有一位不同,且每次改变后的数都是素数。
思路:bfs+枚举每一位+素数筛选。
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
const int N=;
int prime[N],vis[N],b[];
void is_prime()
{
memset(prime,,sizeof(prime));
for (int i = ; i <= ; i ++)
{
prime[i] = i%;
}
for (int i = ; i <= ; i ++)
{
if (prime[i])
{
for (int j = *i; j <= ; j += i)
{
prime[j] = ;
}
}
}
memset(prime,,*sizeof(int));//只保留1000至9999以内的素数
}
int bfs(int l,int r)
{
int step[N],num ;
memset(vis,,sizeof(vis));
memset(step,,sizeof(step));
queue<int>q;
q.push(l);
vis[l] = ;
while(!q.empty())
{
int ll = q.front();
q.pop();
b[] = ll%;//个
b[] = ll/%;//十
b[] = ll/%;//百
b[] = ll/;//千
for (int i = ; i < ; i ++)
{
int t = b[i];//将该位上的数保存,便于恢复
for (int j = ; j < ; j ++)//枚举
{
if(t!=j)
{ b[i] = j;
num = b[]*+b[]*+b[]*+b[];
if (!vis[num] && prime[num])//是素数并且没有枚举过
{
q.push(num);
vis[num] =;
step[num] = step[ll]+;//当前步数为上一状态的步数加1。
}
if (num==r)
{
return step[num];
}
} }
b[i] = t;//恢复该位上的数
}
}
return -;
}
int main()
{
int t,n,m;
is_prime();
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int ans = bfs(n,m);
if (ans==-)
printf("Impossible\n");
else
printf("%d\n",ans); }
return ;
}
Prime Path(bfs)的更多相关文章
- POJ2126——Prime Path(BFS)
Prime Path DescriptionThe ministers of the cabinet were quite upset by the message from the Chief of ...
- POJ3126 Prime Path (bfs+素数判断)
POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...
- [HDU 1973]--Prime Path(BFS,素数表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1973 Prime Path Time Limit: 5000/1000 MS (Java/Others ...
- POJ 3126 Prime Path(BFS 数字处理)
意甲冠军 给你两个4位质数a, b 每次你可以改变a个位数,但仍然需要素数的变化 乞讨a有多少次的能力,至少修改成b 基础的bfs 注意数的处理即可了 出队一个数 然后入队全部能够由这个素 ...
- poj 3126 Prime Path bfs
题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- POJ3126 Prime Path —— BFS + 素数表
题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- [POJ]P3126 Prime Path[BFS]
[POJ]P3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35230 Accepted: ...
- CD0J/POJ 851/3126 方老师与素数/Prime Path BFS
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9982 Accepted: 5724 Descri ...
- POJ 3126 Prime Path(BFS求“最短路”)
题意:给出两个四位数的素数,按如下规则变换,使得将第一位数变换成第二位数的花费最少,输出最少值,否则输出0. 每次只能变换四位数的其中一位数,使得变换后的数也为素数,每次变换都需要1英镑(即使换上的数 ...
- poj 3126 Prime Path( bfs + 素数)
题目:http://poj.org/problem?id=3126 题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素 ...
随机推荐
- python读取单个文件操作
python读取单个文件,参考<笨方法学python>的第15节. 运行方式是采用:python python文件名 要读取的文件名 代码中 script, filename = argv ...
- 【转载】HTTP 基础与变迁
原文地址:https://segmentfault.com/a/1190000006689489 HTTP HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于 ...
- UICollectionView框架总结
一.UIcollectionView介绍 1.1.简介 首先看苹果官方文档 UICollectionView Class Reference 的介绍: The UICollectionView cla ...
- 基于zk“临时顺序节点“的分布式锁
import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.io.IOException; im ...
- ES6 作用域的问题
- 在oninitdialog后添加初始化变量
需要 UpdateData(FALSE); 刷新界面 不然有时会不显示.
- 集成学习_Bagging 和随机森林(rf)
集成学习方式总共有3种:bagging-(RF).boosting-(GBDT/Adaboost/XGBOOST).stacking 下面将对Bagging 进行介绍:(如下图所示) ...
- codevs1231 最优布线问题
1231 最优布线问题 题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地 ...
- SSH技术介绍和Xshell公钥远程登陆
SSH简介 传统的网络服务程序,比如FTP,POP,Telnet,本质上都是不安全的,因为它们在网络上用明文传送数据.用户账号和用户口令,很容易受到中间人攻击方式的攻击,攻击者会冒充真正的服务器接收用 ...
- 第三节:numpy之数组数学运算