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 ...
随机推荐
- Modbus通讯错误检测方法
标准的Modbus串行网络采用两种错误检测方法.奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息.它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧. 用户 ...
- Python_购物车问题
import os goods = [ {"name": "电脑", "price": 1999}, {"name&q ...
- 前端--3、JavaScript
引入方式: 直接在HTML中写入(了解) 写到文件中引入 声明变量 变量赋值方式 单个变量赋值 多变量的变量赋值 数据类型 数字and字符串 boolean undefined 数据类型的存储 数组 ...
- 微信小程序资料总结
http://blog.csdn.net/ZCLengendary/article/details/54312030 --添加html标签与处理 https://www.cnblogs.com/HD ...
- angular6 NG-ZORRO 的使用
1:关于 NG-ZORRO中使用它自己组件改变样式时得使用样式穿透 “class” :: ng-deep "class"
- OpenTSDB监控
OpenTSDB监控
- LPSTR LPCTSTR
UNICODE:它是用两个字节表示一个字符的方法.比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNI ...
- spring boot MongoDb配置和多数据源
配置文件: # MongoDB配置项 mongodb.base.host: 192.168.1.204 mongodb. mongodb.base.database: xxx mongodb.base ...
- Colletions工具类常用方法
Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合 排序操作 void reverse(List list)/ ...
- Android 各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...