题目地址:http://poj.org/problem?id=3126

Input

One line with a positive number: the number of test cases (at most 100). Then for each test case, one line with two numbers separated by a blank. Both numbers are four-digit primes (without leading zeros).

Output

One line for each case, either with a number stating the minimal cost or containing the word Impossible.

Sample Input

3
1033 8179
1373 8017
1033 1033

Sample Output

6
7
0
分析:从一个四位素数a 变到另一个四位素数b,求最少的变换次数。bfs求最少的次数!(变换的要求请读题目)
一开始在记录一个数是否被访问过的时候,用了一种比较的方式,即:比较当前要生成的数和cur是否相同,这种
判断是否该数字是否访问过的方法是不对的,因为这样判断还是会导致一个数可能会被多次加入队列,最后TLE。
故,改为vis[]标记判断是否访问过,这样每个数顶多会被加入队列一次。AC!
代码:
 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <cmath>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#define N 100000+100 using namespace std; struct node
{
int a, b, c, d; //a不能等于0
int path;
}; int f[];
bool vis[]; void sushu()
{
int i, dd=sqrt(+0.5);
memset(f, , sizeof(f));
i=; f[]=f[]=; //not
while(i<=dd){
for(int j=i+i; j<=; j+=i)
f[j]=; // not
i++;
while(f[i]==) i++;
}
} int main()
{
sushu(); //筛素数
// printf("%d %d", f[1001], f[1003] ); int tg; scanf("%d", &tg);
int dd, ff;
int i, j; while(tg--){
scanf("%d %d", &dd, &ff);
if(dd==ff){
printf("0\n"); continue;
}
node s, e;
s.a=dd/; s.b=dd/%; s.c=dd/%; s.d=dd%; s.path=;
e.a=ff/; e.b=ff/%; e.c=ff/%; e.d=ff%; queue<node>q; bool flag=false;
q.push(s); node cur;
int ans=;
memset(vis, false, sizeof(vis));
vis[dd]=true; while(!q.empty()){
cur=q.front(); q.pop(); for(i=; i<=; i+=){//枚举个位 偶数排除
int temp=cur.a*+cur.b*+cur.c*+i;
if(!vis[temp] && f[temp]==){
node cc=cur; cc.d=i; cc.path=cur.path+;
vis[temp]=true;
if(temp==ff){
flag=true; ans=cc.path; break;
}
q.push(cc);
}
}
if(flag) break; for(i=; i<=; i++){ //枚举个位 int temp=cur.a*+cur.b*+i*+cur.d;
if(!vis[temp] &&f[temp]==){
node cc=cur; cc.c=i; cc.path=cur.path+;
vis[temp]=true;
if(temp==ff){
flag=true; ans=cc.path; break;
}
q.push(cc);
}
}
if(flag) break; for(i=; i<=; i++){//枚举百位
int temp=cur.a*+i*+cur.c*+cur.d;
if(!vis[temp] &&f[temp]==){
node cc=cur; cc.b=i; cc.path=cur.path+;
vis[temp]=true;
if(temp==ff){
flag=true; ans=cc.path; break;
}
q.push(cc);
}
}
if(flag) break; for(i=; i<=; i++){ //枚举千位 千位不能为0
int temp=i*+cur.b*+cur.c*+cur.d;
if(!vis[temp] &&f[temp]==){
node cc=cur; cc.a=i; cc.path=cur.path+;
vis[temp]=true;
if(temp==ff){
flag=true; ans=cc.path; break;
}
q.push(cc);
}
}
if(flag) break;
}
if(flag) printf("%d\n", ans );
else printf("Impossible\n");
}
return ;
}
												

poj 3126 Prime Path 【bfs】的更多相关文章

  1. POJ 3126 Prime Path【BFS】

    <题目链接> 题目大意: 给你两个四位数,它们均为素数,以第一个四位数作为起点,每次能够变换该四位数的任意一位,变换后的四位数也必须是素数,问你是否能够通过变换使得第一个四位数变成第二个四 ...

  2. POJ 3126 Prime Path【从一个素数变为另一个素数的最少步数/BFS】

    Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted: 14555 Descript ...

  3. POJ - 3126 - Prime Path(BFS)

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

  4. (简单) POJ 3126 Prime Path,BFS。

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  5. POJ 3126 Prime Path (bfs+欧拉线性素数筛)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  6. POJ 3126 Prime Path (BFS)

    [题目链接]click here~~ [题目大意]给你n,m各自是素数,求由n到m变化的步骤数,规定每一步仅仅能改变个十百千一位的数,且变化得到的每个数也为素数 [解题思路]和poj 3278类似.b ...

  7. POJ 3126 Prime Path(BFS算法)

    思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...

  8. BFS POJ 3126 Prime Path

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

  9. 双向广搜 POJ 3126 Prime Path

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

随机推荐

  1. OpenGL三角形的双面不同颜色的绘制

    对于一个三角形,我要给它正反面不同的颜色.然后通过旋转,看出它的效果. 我只想到了2种方法,下面我来写一下这两种方法. 第一种方法,通过角度的判断重设glColor3f的参数(这种方法局限性很大,不推 ...

  2. Security Testing Basics

    Security Testing BasicsSoftware security testing is the process of assessing and testing a system to ...

  3. JSON-Schema 最科学的表单验证模式

    相关传送门: # JSON schema与表单验证 https://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651226711&i ...

  4. C语言中的signal函数

    signal是一个系统调用.是一种特殊的中断,当某种特定的"软件中断"发生时.用于调用的程序.中断通常是程序运行中出现的特殊情况,如引用特殊内存中的非法地址, 浮点数被0除. si ...

  5. 怎样新建Quartusproject—FPGA新手教程

    这一章我们来实现第一个FPGAproject-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建project,代码设计,综合实现.管脚约束,下载FPGA程序. 掌握本章内 ...

  6. Selection Problem (选择问题)

    在一个由n个元素组成的集合中,第i个“顺序统计量(order statistic)”是该集合中第i小的元素.例如,在一个由n个元素组成的集合中,最小值是第1个顺序统计量,最大值是第n个顺序统计量.而“ ...

  7. CSS div固定顶端

    position: fixed;原来只需要这么一个设置就可以!

  8. saltstack之nginx部署

    1./srv/salt/nginx目录树 . conf.sls file |--- nginx |--- nginx-1.5.1.tar.gz |--- nginx.conf |--- nginx_l ...

  9. Codeforces Round #392 (Div. 2) F. Geometrical Progression

    原题地址:http://codeforces.com/contest/758/problem/F F. Geometrical Progression time limit per test 4 se ...

  10. react-native create-react-app创建项目报错SyntaxError: Unexpected end of JSON input while parsing near '...ttachment":false,"tar' npm代理

    SyntaxError: Unexpected end of JSON input while parsing near '...ttachment":false,"tar' 错误 ...