HDU 1973
Prime Path
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 463 Accepted Submission(s): 305
Problem 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
//这题是求从第一个数字变为第二个数字最少须要变几次,每一次仅仅能改变一个数字,而且要满足改变之后的仍然是素数
//从第一个字符到第四个字符相当于迷宫中的四个方向 接着每次改变从0-9注意开头第一个字符不能以0开头
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
bool vis[9999]; //标记数组
char start[10]; //起始数字用字符串处理
int stop; //结尾数字
struct Node
{
char tem[10];
int step;
};
int prime(int n) //推断素数
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
} int bfs(char p[])
{
queue <Node> q;
memset(vis,0,sizeof(vis));
int temp;
Node a;
strcpy(a.tem,p);
a.step=0;
q.push(a);
while(!q.empty())
{
Node b;
b=q.front();
q.pop();
sscanf(b.tem,"%d",&temp); //利用sscanf函数将字符串转换为数字直接与结尾比較
if(temp==stop)
return b.step;
vis[temp]=1;
for(int i=0;i<4;i++)
{
char k;
k=i!=0?'0':'1';
for(;k<='9';k++)
{
Node c;
c=b;
c.tem[i]=k;
sscanf(c.tem,"%d",&temp);
if(prime(temp)&&!vis[temp]) //约束条件
{
c.step++;
q.push(c);
vis[temp]=1;
}
}
}
}
return -1;
}
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%s%d",start,&stop);
int flag=bfs(start);
int flag=bfs(start);
if(flag==-1)
printf("Impossible\n");
else
printf("%d\n",flag);
}
return 0;
}
HDU 1973的更多相关文章
- 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,素数表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1973 Prime Path Time Limit: 5000/1000 MS (Java/Others ...
- hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...
- hdu 1973 bfs+素数判断
题意:给出两个四位数,现要改变第一个数中的个,十,百,千位当中的一个数使它最终变成第二个数,要求这过程中形成的数是素数,问最少的步骤题解:素数筛选+bfsSample Input31033 81791 ...
- HDU - 1973 - Prime Path (BFS)
Prime Path Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 【BFS】hdu 1973 Prime Path
题目描述: http://poj.org/problem?id=3414 中文大意: 使用两个锅,盛取定量水. 两个锅的容量和目标水量由用户输入. 允许的操作有:灌满锅.倒光锅内的水.一个锅中的水倒入 ...
- HDU1973 http://acm.hdu.edu.cn/showproblem.php?pid=1973
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> #inc ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- 配置JDK、tomcat及Java Web项目部署
一.JDK的安装 (1)下载安装JDK: 这个就不用说了,直接官网下载jdk安装即可.http://www.oracle.com/technetwork/java/javaee/downloads/i ...
- unbuntu系统:python2.7安装pyspark
以前在进行搜索引擎rank-svm排序模型训练时,直接使用python读取的HDFS日志文件.统计计算等预处理操作再进行svm模型,最终产生出训练模型.现在回想一下,数据预处理这一块完全可以使用spa ...
- STA之Concepts (1)
Static Timing Analysis is one of the many techniques available to verify the timing of a digital des ...
- Mac上简单常用Terminal命令
方案1 SSH是一个非常伟大的工具,如果你要在互联网上远程连接到服务器,那么SSH无疑是最佳的候选.SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃听,连接劫持和其它攻击.本文将为 ...
- 【sqli-labs】 less65 GET -Challenge -Blind -130 queries allowed -Variation4 (GET型 挑战 盲注 只允许130次查询 变化4)
双引号括号闭合 http://192.168.136.128/sqli-labs-master/Less-65/?id=1")%23
- C++ 程序的编译
一.编译器都具备集成开发环境(Integrated Developed Environment,IDE) 二.程序源文件命名约定: C++ 的后缀一般是 .cpp .cc .C .cpp .cxx 三 ...
- 12Microsoft SQL Server 索引
Microsoft SQL Server 索引 8.1创建索引 CREATE INDEX idx_name ON table_name(列名) --创建非聚集索引 use student go cre ...
- BZOJ 1176: [Balkan2007]Mokia KDtree
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin), ...
- 网络编程 - socket实现多个连接处理
#服务端import socket,osso_server=socket.socket()so_server.bind(("localhost",6969))so_server.l ...
- IP地址、MAC地址、ARP地址解析协议
互联网中一台主机要和另一台主机实现通信首先需要知道彼此在互联网中的位置,主机在互联网中的位置是通过ip地址标记的,当找到ip地址后,再通过端口号标识运行在主机中的进程从而实现通信. IP地址: IP地 ...