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 ...
随机推荐
- JavaScript 学习笔记 -- String.trim + format
最近仍在IE6徘徊,低版本的浏览器没有实现JavaScript 的trim() 和 format(). . 主要是这两个使用的比较多,先整理出来: 1.trim() -- 去除字符串中开始和结尾部分, ...
- 网页引导:jQuery插件实现的页面功能介绍引导页效果
现在很多网站不仅是介绍,更多的是有一些功能,怎么样让客户快速的知道网站有哪些功能呢?这里pagewalkthrough.js插件能帮我们实现,它是一个轻量级的jQuery插件,它可以帮助我们创建一个遮 ...
- AjaxAnywhere+struts用法
AjaxAnywhere的用法 1,简介 AjaxAnywhere被设计成能够把任何一套现存的JSP组件转换成AJAX感知组件而不需要复杂的JavaScript编码.它利用标签把Web页面简单地划分成 ...
- flask 知识点总结
============================request对象的常用属性============================具体使用方法如下:request.headers, requ ...
- angularjs controller的两种写法
在Angular中,Directive.Service.Filter.Controller都是以工厂方法的方式给出,而工厂方法的参数名对应着该工厂方法依赖的Service.如: app.control ...
- SQLite初试...
string dataPath = "../../UserData.dbx"; //System.IO.Directory.GetCurrentDirectory() + &quo ...
- Android中实现圆角矩形及半透明效果。
注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在做Android开发时,我们为了美观,有时候需要使用圆角矩形,或半透明之类的效果,在网页设计中很容易实现.但在Android开发中 ...
- C#4.0 特性
动态绑定 命名和可选参数 泛型的协变和逆变 互操作性 动态支持 Office 可编程性 类型等效性支持 协变和逆变 当类型为dynamic的视图模型遭遇匿名对象 https://msdn.micros ...
- Hibernate框架之入门案例
今天终于开始学习了三大框架的其中一个框架,Hibernate框架,在这里不去讲Hibernate框架的一些基础概念了,直接切入代码,带大家了解一下Hibernate能干什么, Hibernate的人们 ...
- Asp.Net网页头部动态加载标题、描述、关键字、css和js文件的方法
首先head标签上添加runat="server". protected void Page_Load(object sender, EventArgs e) { Page.Tit ...