[HDU 1973]--Prime Path(BFS,素数表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1973
Prime Path
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
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.
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).
the minimal cost or containing the word Impossible.
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
int cur, step;
}now, Next;
int vis[], star, finish, prime[] = { , , };
void init(){
for (int i = ; i < ; i++){
if (!prime[i]){
for (int j = ; i*j < ; j++)
prime[i*j] = ;
}
}
}
int bfs(){
queue<node> Q;
vis[star] = ;
now.cur = star, now.step = ;
Q.push(now);
while (!Q.empty()){
int i, j;
char num[];
now = Q.front();
Q.pop();
if (now.cur == finish) return now.step;
for (i = ; i < ; i++){
sprintf(num, "%d", now.cur);
for (j = ; j < ; j++){
if (j == && i == )
continue;
if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j + (num[] - '') * + (num[] - '') * + (num[] - '') * ;
if (!prime[Next.cur] && !vis[Next.cur])
{
Next.step = now.step + ;
vis[Next.cur] = ;
Q.push(Next);
}
}
}
}
return -;
}
int main(){
int t, ans;
cin >> t;
init();
while (t--){
cin >> star >> finish;
memset(vis, , sizeof(vis));
ans = bfs();
if (ans == -) cout << "Impossible\n";
else cout << ans << endl;
}
return ;
}
其实这道题学校OJ(Swust OJ)也有但是坑爹的后台数据变成a+b的后台数据了,Orz~~~(无爱了)
[HDU 1973]--Prime Path(BFS,素数表)的更多相关文章
- hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...
- hdu 1973 Prime Path
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1973 Prime Path Description The ministers of the cabi ...
- HDU - 1973 - Prime Path (BFS)
Prime Path Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- POJ3126 Prime Path (bfs+素数判断)
POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...
- poj 3126 Prime Path( bfs + 素数)
题目:http://poj.org/problem?id=3126 题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素 ...
- POJ 3126 Prime Path (BFS + 素数筛)
链接 : Here! 思路 : 素数表 + BFS, 对于每个数字来说, 有四个替换位置, 每个替换位置有10种方案(对于最高位只有9种), 因此直接用 BFS 搜索目标状态即可. 搜索的空间也不大. ...
- 【BFS】hdu 1973 Prime Path
题目描述: http://poj.org/problem?id=3414 中文大意: 使用两个锅,盛取定量水. 两个锅的容量和目标水量由用户输入. 允许的操作有:灌满锅.倒光锅内的水.一个锅中的水倒入 ...
- POJ 3126 Prime Path(素数路径)
POJ 3126 Prime Path(素数路径) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 The minister ...
- POJ 3216 Prime Path(打表+bfs)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27132 Accepted: 14861 Desc ...
随机推荐
- quartz 定时调度持久化数据库配置文件
1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址 https://github.com/quartz-scheduler/quar ...
- preg_replace的用法
<?php $str1 = "03/28/2015"; // 要替换成 2015-03-28 echo preg_replace("/([0-1][1-9])\/( ...
- 使用 Sublime Text 3 开发 React
下载, 安装, 破解就不用说了, 直接进主题: 1, 安装Package Control 默认的Sublime 3中没有Package Control,要进行安装之后才能用这个去安装其他的插件. 简单 ...
- php学习笔记(2)
1.算数运算 <?php $a = 8; $b = 2; $c = 3; echo $a+$b."<br>\n"; echo $a-$b."<br ...
- 帝国cms7.0忘记后台管理账户用户名密码
最近刚登陆以前的网站,但是发现自己的后台管理用户名密码已经忘记,于是到帝国cms论坛里面找了一下解决方案,成功解决问题.特此分享一下解决成功经验. 原帖地址:http://bbs.phome.net/ ...
- Splunk
http://www.huxiu.com/article/33724/1.html http://www.netis.com.cn/splunk/%E4%BB%80%E4%B9%88%E6%98%AF ...
- cout输出流的执行顺序
一道题目: #include <iostream> using namespace std; ; template<typename T> int foo() { int va ...
- Android 实现简单天气应用
引导页面,多个城市的天气,可以通过滑动来翻阅. 先看下截图: 1.城市天气界面 2.引导界面 应用引导页面 package org.qxj.iweather.page; import org.qxj. ...
- Sicily-1152 回溯算法
一.题意: 走日字,每个位置都有有8种新位置,从起点开始刚好过29步遍历其他位置一遍. 二.代码 // // main.cpp // Sicily-1152 回溯算法 // // Created by ...
- B - 楼下水题(扩展欧几里德)
B - 楼下水题 Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...