题意:一个4位的素数每次变动一个数位,中间过程也要上素数,问变成另一个的最小步数。

线性筛一遍以后bfs就好。我写的双向,其实没有必要。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
//#include<bits/stdc++.h>
using namespace std;typedef long long ll;const int maxn = 1e5;
bool isNot[maxn];void seive(int n = maxn-1)
{int m = sqrt(n+0.5);for(int i = 2; i <= m; i++){if(!isNot[i])for(int j = i*i; j <= n; j += i){isNot[j] = true;}}isNot[0] = isNot[1] = true;
}int d[maxn];
int vis[2][maxn],clk;
#define PB push_back
#define PS push
const int wei[] = {1,10,100,1000};void doubleBfs(int s,int t)
{if(s == t) { puts("0"); return; }queue<int> Q[3];queue<int> *q1 = Q, *q2 = Q+1, *nxt = Q+2;int *v1 = *vis, *v2 = vis[1];q1->PS(s); q2->PS(t);v1[s] = ++clk; v2[t] = clk;d[s] = 0; d[t] = 0;while(q1->size() && q2->size()){if(q1->size()>q2->size()){swap(q1,q2); swap(v1,v2);}while(q1->size()){int u = q1->front(); q1->pop();int dig[4];for(int i = 0; i < 4; i++){dig[i] = u/wei[i]%10;}for(int i = 0; i < 4; i++){int t = u - dig[i]*wei[i];for(int j = i == 3; j < 10; j++){if(j != dig[i]){int v = t+j*wei[i];if(!isNot[v] && v1[v] != clk){if(v2[v] == clk) {printf("%d\n",d[v]+d[u]+1);return;}d[v] = d[u]+1;nxt->PS(v);v1[v] = clk;}}}}}swap(q1,nxt);}puts("Impossible");
}//#define LOCAL
int main()
{
#ifdef LOCALfreopen("in.txt","r",stdin);
#endifseive();int T; scanf("%d",&T);while(T--){int a,b; scanf("%d%d",&a,&b);doubleBfs(a,b);}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4896183.html

POJ 3126 Prime Path(筛法,双向搜索)相关推荐

  1. POJ 3126 - Prime Path + Python(BFS)

    ()原题链接: # 原题:POJ 3126 - Prime Path | 眈眈探求 # 解题思路:https://blog.csdn.net/LYHVOYAGE/article/details/182 ...

  2. POJ - 3126 - Prime Path(BFS)

    Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...

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

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

  4. POJ 3126 Prime Path(BFS + 素数打表)

    题意:给定两个四位素数, 从一个素数到另一个素数,最少用几步,可以一次更改四位中的任意一位,但每次改变都只能是素数. 解题思路:四位数每一位情况有十种情况0-9, 四位共有40种情况, 枚举40种情况 ...

  5. poj 3126 Prime Path

    看题目... 看解题报告... 敲.... 题意转自:優YoU  http://user.qzone.qq.com/289065406/blog/1303623014 大致题意: 给定两个四位素数a  ...

  6. POJ 3126 Prime Path 简单广搜(BFS)

    题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...

  7. POJ 3126 Prime Path BFS搜索

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

  8. POJ 3126 Prime Path

    水题:直接判断素数+bfs 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #in ...

  9. Prime Path POJ - 3126

    题目链接:Prime Path POJ - 3126 =================================================== Prime Path Time Limit ...

最新文章

  1. git 工作常用命令
  2. Computer Organization and Design--计组作业习题(1)
  3. ASP.NET中JSON的序列化和反序列化
  4. 关于8位AD_DA转换芯片的采样率问题
  5. Impala-shell 查询异常 - ERROR: AnalysisException: Failed to evaluate expr: 1
  6. 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子
  7. 订阅发布系统得解耦与冗余
  8. 集合 (二) ----- Map集合详解
  9. “按字典序输出方案” 解决方法
  10. 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
  11. 机器学习中的训练集、验证集、测试集;交叉验证方法
  12. PIN/PAD Design in SoC - 1 (待续)
  13. 闲鱼x-sign, x-mini-wua算法签名接口调用
  14. 阿里云EMAS 移动推送发布uni-app插件
  15. 反双曲余弦函数之C#设计笔记(五)
  16. 美国薪资最高的技术技能:Golang、Kafka、DynamoDB、Redshift、Cassandra
  17. php 字符显示不出来,ps文字显示不出来怎么办?
  18. 12c 新特性-统一审计(Unified Auditing)
  19. php 表示每月一号,关于适合每月一号发的说说
  20. 强监管焕新外卖行业,美团、饿了么如何应对?

热门文章

  1. 深度睡眠中,记忆如何被保持?
  2. 微软宣布在机器翻译方面取得突破,中翻英可达人类水平
  3. 雷军的“初恋”回来了
  4. 过年期间:这个 GitHub 项目你必能用到
  5. 摊手:工作五年我拿了两次 N+1 赔偿!
  6. 一场由FPGA触发的芯片战争
  7. 饿了么四年、阿里两年:研发路上的一些总结与思考
  8. Ubuntu 16.04 amd64 bond mode6 配置
  9. Linux常用命令大全-toolfk程序员在线工具网
  10. Js 拦截全局ajax请求