【POJ3126】Prime Path
时间:2019-09-21
本文章向大家介绍【POJ3126】Prime Path,主要包括【POJ3126】Prime Path使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本题知识点:宽度优先搜索
题意很简单。要找一个质数变到另一个质数的最少步数,两个质数都是4位数,变的时候只能变其中一位,变了的数也仍是质数。
思路也很简单,对每一位数进行修改,如果修改后的数仍是质数则入队。
要注意的是千位数不能是0。
数据很小。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int T;
int l, r;
bool take[100005];
struct node{
int num;
int t;
};
queue<node> que;
bool ok;
bool check(int n){
for(int i = 2; i * i <= n; i++){
if(n % i == 0) return false;
}
return true;
}
void bfs(){
node a;
a.num = l; a.t = 0;
que.push(a);
take[l] = true;
while(!que.empty()){
node next, now = que.front(); que.pop();
int f;
// printf("now num:%d t:%d r:%d\n", now.num, now.t, r);
if(now.num == r){
printf("%d\n", now.t);
ok = true;
break;
}
// 个位
f = now.num;
f = f / 10 * 10;
for(int i = 0; i <= 9; i++){
int g = f + i;
if(check(g) && !take[g]){
next.num = g; next.t = now.t + 1;
take[g] = true;
que.push(next);
}
}
// 十位
f = now.num;
f = f / 100 * 100 + f % 10;
for(int i = 0; i <= 9; i++){
int g = f + i * 10;
if(check(g) && !take[g]){
next.num = g; next.t = now.t + 1;
take[g] = true;
que.push(next);
}
}
// 百位
f = now.num;
f = f / 1000 * 1000 + f % 100;
for(int i = 0; i <= 9; i++){
int g = f + i * 100;
if(check(g) && !take[g]){
next.num = g; next.t = now.t + 1;
take[g] = true;
que.push(next);
}
}
// 千位
f = now.num;
f = f % 1000;
for(int i = 1; i <= 9; i++){
int g = f + i * 1000;
if(check(g) && !take[g]){
next.num = g; next.t = now.t + 1;
take[g] = true;
que.push(next);
}
}
}
}
int main()
{
scanf("%d", &T);
while(T--){
memset(take, false, sizeof(take));
scanf("%d %d", &l, &r);
while(!que.empty()) que.pop();
ok = false;
bfs();
if(!ok) printf("Impossible\n");
}
return 0;
}
原文地址:https://www.cnblogs.com/Ayanowww/p/11561576.html
- Android开发必备知识:为什么说Kotlin值得一试
- Go语言实现冒泡排序、选择排序、快速排序及插入排序的方法
- Go语言排序与接口实例分析
- 从 Android 静音看正确的查找 bug 的姿势
- GO语言并发编程之互斥锁、读写锁详解
- 浅析Go语言中的Range关键字
- Go语言使用sort包对任意类型元素的集合进行排序的方法
- 优化Linux的内核参数来提高服务器并发处理能力
- 浅析 Android 的窗口
- Golang同步:锁的使用案例详解
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
- 高性能网络编程7--tcp连接的内存使用
- 从websocket看go的应用
- go语言chan 和 routine活用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux静态链接库使用类模板的快速排序算法
- TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
- php post换行的方法
- apache实现部署多个网站(一个ip部署多域名)的方法详解
- windows7 32、64位下python爬虫框架scrapy环境的搭建方法
- python实现简单名片管理系统
- PHP7创建COOKIE和销毁COOKIE的实例方法
- PHP实现新型冠状病毒疫情实时图的实例
- 深入浅析Python2.x和3.x版本的主要区别
- 用户态进程如何得到虚拟地址对应的物理地址?
- Linux中利用grep命令如何检索文件内容详解
- laravel框架学习笔记之组件化开发实现方法
- PHP7创建销毁session的实例方法
- Vim如何使用相对行号实现一切操作详解
- laravel 框架执行流程与原理简单分析