(BFS)Prime Path (poj3126)
题目:
孤单的zydsg又一次孤单的度过了520,不过下一次不会再这样了。zydsg要做些改变,他想去和素数小姐姐约会。
所有的路口都被标号为了一个4位素数,zydsg现在的位置和素数小姐姐的家也是这样,如果两个路口间只差1个数字,则有一条路连通两个路口。(例如1033和1073间有一条路连接)
现在,你知道了zydsg的位置和素数小姐姐的家,问最少zydsg要走多少条路才能见到素数小姐姐。例如:如果zydsg在1033,素数小姐姐的家在8179,最少要走6条街,走法为:
1033
1733
3733
3739
3779
8779
8179
Input
输入数据有多组,首先是一个数字n,代表之后有n组数据。 其次,在每一组输入中,都包含两个数字a和b,代表zydsg的位置和素数小姐姐家的位置。 其中,a和b都是四位数,而且不含前导0。
Output
每组输入输出一行,表示zydsg最少需要走多少条路。若不存在合法的路径,则输出单词“Impossible”。
Sample Input
3
1033 8179
1373 8017
1033 1033
Sample Output
6
7
0
分析与解答:
水题,一个 结点 改个位十位百位千位,最终到达要求的答案,仍然是层次遍历,把各个位的数都变一遍存到队列里,然后一层存完,拿出队首,再往里面存,直到队首刚好是答案,那就输出并return。
注意这个是多实例,也就是说需要多个queue,所以每次bfs之前注意把前面的queue清空,这题我是把queue定义到外面了,如果定义到bfs里面,就不用再清空queue了
代码参考:
https://blog.csdn.net/LYHVOYAGE/article/details/18228531
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;int n, m;
const int N = 1e4 + 100;
int vis[N];
struct node
{int x, step;
};
queue<node> Q;int prime[10001];
int pri(int k){for(int i=2;i*i<=k;++i){if(k%i==0) return 0;}return 1;
}void abd(){memset(prime,0,sizeof(prime));for(int i=1000;i<=9999;++i){if(pri(i)) prime[i]=1;}
}void BFS(int n)
{node tmp;tmp.x = n;tmp.step = 0;Q.push(tmp);int X, STEP, i;while(!Q.empty()){node tmp;tmp = Q.front();Q.pop();X = tmp.x;STEP = tmp.step;if(X == m){printf("%d\n",STEP);return ;}for(i = 1; i <= 9; i += 2) //个位{int s = X / 10 * 10 + i;if(s != X && !vis[s] && prime[s]){vis[s] = 1;node temp;temp.x = s;temp.step = STEP + 1;Q.push(temp);}}for(i = 0; i <= 9; i++) //十位{int s = X / 100 * 100 + i * 10 + X % 10;if(s != X && !vis[s] && prime[s]){vis[s] = 1;node temp;temp.x = s;temp.step = STEP + 1;Q.push(temp);}}for(i = 0; i <= 9; i++) //百位{int s = X / 1000 * 1000 + i * 100 + X % 100;if(s != X && !vis[s] && prime[s]){vis[s] = 1;node temp;temp.x = s;temp.step = STEP + 1;Q.push(temp);}}for(i = 1; i <= 9; i++) //千位{int s = i * 1000 + X % 1000;if(s != X && !vis[s] && prime[s]){vis[s] = 1;node temp;temp.x = s;temp.step = STEP + 1;Q.push(temp);}}}printf("Impossible\n");return ;
}int main()
{int t, i;scanf("%d",&t);abd();while(t--){while(!Q.empty()) Q.pop();scanf("%d%d",&n,&m);memset(vis,0,sizeof(vis));vis[n] = 1;BFS(n);}return 0;
}
(BFS)Prime Path (poj3126)相关推荐
- 解决JSP路径问题的方法(jsp文件开头path, basePath作用)
解决JSP路径问题的方法(jsp文件开头path, basePath作用) 参考文章: (1)解决JSP路径问题的方法(jsp文件开头path, basePath作用) (2)https://www. ...
- 广搜(BFS)和深搜(DFS)
广搜(BFS)和深搜(DFS) 文章目录 广搜(BFS)和深搜(DFS) 一.广搜(BFS) 二.深搜(DFS) 一.广搜(BFS) #include <bits/stdc++.h> us ...
- Prime Path(bfs)广度优先搜索
题目描述 The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...
- poj3216 Prime Path(BFS)
题目传送门 Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Sec ...
- POJ 3126 Prime Path(BFS + 素数打表)
题意:给定两个四位素数, 从一个素数到另一个素数,最少用几步,可以一次更改四位中的任意一位,但每次改变都只能是素数. 解题思路:四位数每一位情况有十种情况0-9, 四位共有40种情况, 枚举40种情况 ...
- POJ - 3126 - Prime Path(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)
1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...
- 【PTA】龙舌兰酒吧 (BFS求双源最短路)
目录 1.题目描述 2.输入输出 3.解题思路 4.样例解析 5.代码实现 1.题目描述 有一个大小为n*m的矩形小镇,城镇上有房屋("#"表示无法通过),有空地(".& ...
- WUST 2090 HLD与停车场(bfs||dfs||暴力模拟||巧妙思维)
2090: HLD与停车场 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Submitted: 21 Accep ...
最新文章
- sqlplus怎样将名次显示在表的后面_一分一段表怎么用?2019年辽宁高考一分一段表...
- 强/若类型语言 动/静态语言
- java中使用jython_将Jython嵌入到您的Java代码库中
- Cisco ASA站点间穿越nat互相访问的实验
- Hadoop系列之Reporter,Partitioner,JobConf, JobClient
- 什么是 Hadoop 生态系统
- [x-means] 1.x-means简介
- 【Java爬虫】接口模拟微信公众号登录,搜索公众号,获取公众号文章,java实现
- Android MTK PDAF流程
- yolov5 烟雾和火焰检测
- 微软苏州校招笔试 12月27日 By Java
- java、.net、IOS、Android自学编程学习视频与资料
- 微信朋友圈这样招生,才不会被屏蔽!(附实操案例)
- 原型设计工具Axure RP9下载、中文语言操作说明(赠授权码)
- 插槽和axios的封装
- THRESH_OTSU mode: > ‘src_type == CV_8UC1 || src_type == CV_16UC1‘ > where > ‘src_type‘ is 6
- b站推荐怎么重置_b站手机怎么上传视频
- 机器人总动员片尾曲歌词_机器人瓦力 主题曲 很感人的那首歌 叫什么名字
- 如何从照片中提取文字?
- JAVA资深架构师成长路线-架构师筑基必备技能-深入Tomcat底层
热门文章
- plsql developer 安装在win7 64位电脑路径问题
- vb中picturebox透明时看到下面的picturebox中图片
- 使用 Packer、Ansible 和 Terraform 构建不可变的基础设施
- Spring经典面试题
- boost库下的deadline_timer和steady_timer 区别
- 转自知乎-我见过最通俗易懂的KMP算法详解
- Linux使用cmake编译项目,如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)...
- 请解释自动装配模式的区别?_如何从齿条优化方面有效节约机床装配时间
- 打印更无缝:微软改善Win11中通用打印体验
- RTSP摄像机为什么还保留MJPEG编码格式