POJ-3126-Prime Path(BFS)
Prime Path
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 27852 | Accepted: 15204 |
Description

The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices.
— It is a matter of security to change such things every now and then, to keep the enemy in the dark.
— But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know!
— I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old ones on your office door.
— No, it’s not that simple. Suppose that I change the first digit to an 8, then the number will read 8033 which is not a prime!
— I see, being the prime minister you cannot stand having a non-prime number on your door even for a few seconds.
— Correct! So I must invent a scheme for going from 1033 to 8179 by a path of prime numbers where only one digit is changed from one prime to the next prime.
Now, the minister of finance, who had been eavesdropping, intervened.
— No unnecessary expenditure, please! I happen to know that the price of a digit is one pound.
— Hmm, in that case I need a computer program to minimize the cost. You don't know some very cheap software gurus, do you?
— In fact, I do. You see, there is this programming contest going on... Help the prime minister to find the cheapest prime path between any two given four-digit primes! The first digit must be nonzero, of course. Here is a solution in the case above.
1033
1733
3733
3739
3779
8779
8179
The cost of this solution is 6 pounds. Note that the digit 1 which got pasted over in step 2 can not be reused in the last step – a new 1 must be purchased.
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,要求把a变换到b
变换的过程要保证 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位不同,而且每步得到的素数都不能重复。 不得有前导零!
求从a到b最少需要的变换次数。无法变换则输出Impossible
广度优先搜索
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int N = 10000;
bool visit[N];
bool Notprime[N];
int dist[N];
void GetNotPrimeVisit ( )
{
int i, j;
for( i=2; i<=N; i++ )
for( j=i<<1; j<=N; j+=i )
Notprime[j] = true;
fill( Notprime, Notprime+1000, true ); //以防万一把前一千个数去掉
}
int getnumber[45];
int x;
void SwapNumber( int v )
{
x = 0;
int i, a, b, c, d, n;
a = v / 1000;
b = v / 100 % 10;
c = v % 100 / 10;
d = v % 10;
n = v - a * 1000;
for( i=1; i<10; i++ )
getnumber[x++] = n + i * 1000;
n = v - b * 100;
for( i=0; i<10; i++ )
getnumber[x++] = n + i * 100;
n = v - c * 10;
for( i=0; i<10; i++ )
getnumber[x++] = n + i * 10;
n = v - d;
for( i=0; i<10; i++ )
getnumber[x++] = n + i;
}
queue <int> Q;
void BFS ( int a, int b )
{
int i, j, v;
int n = a;
Q.push( n );
visit[n] = true;
while( !Q.empty() )
{
v = Q.front();
if( v == b ) break;
Q.pop();
SwapNumber( v ); //得到40个入口
for( j=0; j<x; j++ )
{
i = getnumber[j];
if( !Notprime[i] && !visit[i] ) //使用素数表和visit剪枝
{
Q.push( i );
dist[i] = dist[v] + 1;
visit[i] = true;
}
}
}
if( !Q.empty() ) cout << dist[v] << endl;
else cout << "Impossible" << endl;
}
int main()
{
GetNotPrimeVisit(); //得到素数表
int t;
cin >> t;
while( t-- )
{
fill( visit, visit+N, false ); //初始化
fill( dist, dist+N, 0 ); //初始化
while( !Q.empty() ) Q.pop(); //初始化,清空队列
int a, b;
cin >> a >> b;
BFS( a, b ); //广搜
}
return 0;
}
POJ-3126-Prime Path(BFS)的更多相关文章
- POJ 3126 Prime Path (BFS)
[题目链接]click here~~ [题目大意]给你n,m各自是素数,求由n到m变化的步骤数,规定每一步仅仅能改变个十百千一位的数,且变化得到的每个数也为素数 [解题思路]和poj 3278类似.b ...
- POJ 3126 Prime Path(BFS算法)
思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...
- POJ 3126 Prime Path (bfs+欧拉线性素数筛)
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
- POJ - 3126 - Prime Path(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- POJ 3126 Prime Path(素数路径)
POJ 3126 Prime Path(素数路径) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 The minister ...
- 【POJ - 3126】Prime Path(bfs)
Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...
- poj 3126 Prime Path(搜索专题)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20237 Accepted: 11282 Desc ...
- HDU - 1973 - Prime Path (BFS)
Prime Path Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Prime Path(BFS)
Prime Path Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total S ...
- (简单) POJ 3126 Prime Path,BFS。
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
随机推荐
- 解题报告Best Time to Buy and Sell Stock with Cooldown
题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...
- 全新的css网站布局--Grid布局
Grid布局全新的css网站布局 CSS Grid 布局由两个核心组成部分是 wrapper(父元素)和 items(子元素). wrapper 是实际的 grid(网格),items 是 grid( ...
- Zedboard学习(四):PS+PL搭建SoC最小系统 标签: fpgazedboardxilinxsoczynq 2017-07-07 15:58 7人阅读
zynq最核心的设计理念就是软件加硬件,即PS+PL.通过软硬件协同设计,结合了FPGA与双arm9内核,对于嵌入式拥有极大的优势. SoC:System on Chip的缩写,称为芯片级系统,也有称 ...
- 数字图像处理实验(总计23个)汇总 标签: 图像处理MATLAB 2017-05-31 10:30 175人阅读 评论(0)
以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...
- libpcap编程实例
#include <stdio.h> #include <stdlib.h> #include <pcap.h> #include <errno.h> ...
- code1085 数字游戏
划分dp 把环变链(读入4 3 -1 2变成4 3 -1 2 4 3 -1 2) 设dp[i][j][k]为把i~j分成k份,各部分内的数字相加,相加所得的k个结果对10取模后再相乘,最终得到的一个数 ...
- 3d点云与cad模型
https://stackoverflow.com/questions/19000096/match-3d-point-cloud-to-cad-model
- pcl文档库
http://docs.pointclouds.org/trunk/structpcl_1_1_polygon_mesh.html
- NPOI读写Excel sheet操作
QueryInfo dataInfo = new QueryInfo(); dataInfo.CustomSQL = $@" select t1.name name,t1.url url f ...
- OSAL的原理
讲解协议栈怎么运行起来!!回顾:1.应用层是一个任务,它有一个系统分配给他的数值唯一的编号叫做任务ID 2.任务可以处理事件,处理事件的这些代码都在一个函数里,这个函数叫任务事件处理函数 3.应用层任 ...