Mathematics:Prime Path(POJ 3126)
题目大意:给定两个素数a,b,要你找到一种变换,使得每次变换都是素数,如果能从a变换到b,则输出最小步数,否则输出Impossible
水题,因为要求最小步数,所以我们只需要找到到每个素数的最小步数就可以了,每个权都是1,所以用BFS就可以了,一开始我还用DFS,太丢人了,一开始就把素数表打好就可以了
#include <iostream>
#include <functional>
#include <algorithm> using namespace std; typedef int Position;
typedef struct _set
{
char num[];
}Set,Queue;
bool BFS(const int);
void Search_Prime(void);
int Get_Num(char *); static bool prime_set[];
static char num[], goal_set[];
static int min_step[], pow_sum[] = { , , , };
static void Push(char *,Position);
static char *Pop(Position);
Queue que[ * ]; int main(void)
{
int case_sum, goal_num; Search_Prime();
scanf("%d", &case_sum); while (case_sum--)
{
getchar();
scanf("%c%c%c%c", &num[], &num[], &num[], &num[]);
getchar();
scanf("%c%c%c%c", &goal_set[], &goal_set[], &goal_set[], &goal_set[]);
goal_num = Get_Num(goal_set);
if (!BFS(goal_num))
printf("Impossible\n");
} return ;
} int Get_Num(char *s)
{
int ans = ;
for (int i = ; i < ; i++)
ans += (s[ - i] - '') * pow_sum[i];
return ans;
} void Search_Prime(void)//线筛法打表
{
int i, j;
prime_set[] = ;
memset(prime_set, , sizeof(prime_set));
for (i = ; i < ; i++)
{
for (j = ; j <= i && i*j < ; j++)
if (!prime_set[j])
prime_set[i*j] = ;
}
} static void Push(char *num, Position back)
{
for (int i = ; i < ; i++)
que[back].num[i] = num[i];
} static char *Pop(Position head)
{
return que[head].num;
} bool BFS(const int goal)
{
memset(min_step, -, sizeof(min_step));
Position head = , back = ;
int i, j, sum_tmp, step_now;
char *out, tmp_int; sum_tmp = Get_Num(num);
if (sum_tmp == goal)
{
printf("0\n");
return true;
}
Push(num, back++); min_step[sum_tmp] = ; while (head != back)
{
out = Pop(head++); sum_tmp = Get_Num(out);
step_now = min_step[sum_tmp];
for (i = ; i < ; i++)
{
tmp_int = out[i];
for (j = ; j < ; j++)
{
if (i == && j == || tmp_int == j + '') continue;
out[i] = j + '';
sum_tmp = Get_Num(out);
if (min_step[sum_tmp] == - && !prime_set[sum_tmp])
{
min_step[sum_tmp] = step_now + ;
Push(out, back++);
if (sum_tmp == goal)
{
printf("%d\n", min_step[sum_tmp]);
return true;
}
}
}
out[i] = tmp_int;
}
}
return false;
}
Mathematics:Prime Path(POJ 3126)的更多相关文章
- Prime Path(POJ - 3126)【BFS+筛素数】
Prime Path(POJ - 3126) 题目链接 算法 BFS+筛素数打表 1.题目主要就是给定你两个四位数的质数a,b,让你计算从a变到b共最小需要多少步.要求每次只能变1位,并且变1位后仍然 ...
- kuangbin专题 专题一 简单搜索 Prime Path POJ - 3126
题目链接:https://vjudge.net/problem/POJ-3126 题意:给你两个四位的素数N,M,每次改变N四位数中的其中一位,如果能经过有限次数的替换变成四位数M,那么求出最少替换次 ...
- POJ - 3126 - Prime Path(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- poj 3126 Prime Path bfs
题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- POJ 3126 Prime Path(素数路径)
POJ 3126 Prime Path(素数路径) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 The minister ...
- BFS POJ 3126 Prime Path
题目传送门 /* 题意:从一个数到另外一个数,每次改变一个数字,且每次是素数 BFS:先预处理1000到9999的素数,简单BFS一下.我没输出Impossible都AC,数据有点弱 */ /**** ...
- Prime Path(poj 3126)
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
- Prime Path(POJ 3126 BFS)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15325 Accepted: 8634 Descr ...
随机推荐
- GOF业务场景的设计模式-----单例模式
个人觉得 纯粹的学习设计模式,是不对的.也不能为了使用设计模式,而硬搬设计模式来使用 单例模式可能是 最简单的设计模式也是 大家知道最多的设计模式.当然 ,有很多种写法 定义:确保一个类只有一个实例, ...
- webapp开发要点记录
1. iphone 各机型 机型 分辨率 像素比 物理分辨率 高* 宽 * 后 主屏对角线长度 重量 像素密度(ppi) iphone4/iphone4s 320 * 480 2 640 * 960 ...
- POJ 2486 Apple Tree
好抽象的树形DP......... Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6411 Accepte ...
- apt-get 按照php7后apache 输出php源文件
需要添加php7的模块 sudo apt-get install libapache2-mod-php7.0
- c语言小知识点
大一时学c语言,总结的一些自己感觉很零碎且容易忘的知识点,不对之处请指正 1.字符串不管中间是否有数值0,结尾一定有数值02.浮点类型的变量存储并不精确3.printf格式串自动右对齐,加负号左对齐4 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之一
一.简介 在计算机的世界里,当我们谈论并发时,我们指的是一系列的任务同时运行于一个计算机中.这里说的同时运行,在计算机拥有多于一个处理器或者是一个多核处理器的时候才是真正的同时,在计算机只拥有单核处理 ...
- iOS开发——UI进阶篇(十六)Quartz2D实战小例子
一.画线 只有在drawRect中才能获取到跟view相关联的上下文 - (void)drawRect:(CGRect)rect {} 一条线 // 1.获取跟当前View相关联的layer上下文(画 ...
- UIMenuController使用
- (void)bubbleDidLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { if(gestureRecognizer. ...
- 剑指Offer 反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. 思路: 法1:用栈,压栈出栈 法2:头插法(有递归非递归2中) AC代码: /* struct ListNode { int va ...
- echarts
ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11 ...