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 之糗事百科多线程爬虫案例
import requests from lxml import etree import json import threading import queue # 采集html类 class Get ...
- 微信小程序获取二维码并把logo替换为自己的头像
$avatarUrl = 'http://cms-bucket.nosdn.127.net/2018/05/28/a1a44ffdc2d24f928c1860d4fbf54703.jpeg?image ...
- Boolean对象与Boolean原始值的区别
我们先来看下面这道题: var x = new Boolean(false); if (x) { alert('hi'); } var y = Boolean(0); if (y) { ale ...
- SSHFS使用笔记
在写树莓派集群项目的时候,发现如果在树莓派上维护的代码需要非常费力才能跟本地项目代码同步,因此打算将Server端和Client端代码分开,树莓派上的Client端代码远程挂载到本地,这样做比之前要更 ...
- python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...
- hdu 3500 DFS(限定)
Fling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submi ...
- SFTP文件上传下载
http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html (转载)
- hdu2001 计算两点间的距离【C++】
计算两点间的距离 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- eclipse 下使用 git
一.默认仓库文件夹 二.window -->perspective --> customize perspective 三.提交时,要忽略的文件
- systemtap dtrace与 oracle
https://fritshoogland.wordpress.com/page/3/ http://externaltable.blogspot.com/2013/06/dtrace-explora ...