素数通道

  题目大意:给定两个素数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)的更多相关文章

  1. Prime Path(POJ - 3126)【BFS+筛素数】

    Prime Path(POJ - 3126) 题目链接 算法 BFS+筛素数打表 1.题目主要就是给定你两个四位数的质数a,b,让你计算从a变到b共最小需要多少步.要求每次只能变1位,并且变1位后仍然 ...

  2. kuangbin专题 专题一 简单搜索 Prime Path POJ - 3126

    题目链接:https://vjudge.net/problem/POJ-3126 题意:给你两个四位的素数N,M,每次改变N四位数中的其中一位,如果能经过有限次数的替换变成四位数M,那么求出最少替换次 ...

  3. POJ - 3126 - Prime Path(BFS)

    Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...

  4. 双向广搜 POJ 3126 Prime Path

      POJ 3126  Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16204   Accepted ...

  5. poj 3126 Prime Path bfs

    题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  6. POJ 3126 Prime Path(素数路径)

    POJ 3126 Prime Path(素数路径) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 The minister ...

  7. BFS POJ 3126 Prime Path

    题目传送门 /* 题意:从一个数到另外一个数,每次改变一个数字,且每次是素数 BFS:先预处理1000到9999的素数,简单BFS一下.我没输出Impossible都AC,数据有点弱 */ /**** ...

  8. Prime Path(poj 3126)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  9. Prime Path(POJ 3126 BFS)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15325   Accepted: 8634 Descr ...

随机推荐

  1. mybaties # , $

    mybaties会对#引入的值加上双引号, 如: #{buildingName} -------->"buildingName";mybaties会将$引入的值直接显示到sq ...

  2. AlwaysOn可用性组功能测试(三)--其他测试

    三. 大数据量操作的时候发生的切换 1.对表进行大量插入,执行1千万遍,如下语句 insert into aa select * from sys.sysprocesses go 10000000 2 ...

  3. UML浅析

    UML概述 UML (Unified Modeling Language)为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程. UML模 ...

  4. 如何给wordpress外部链接自动添加nofollow

    wordpress多作者博客可以丰富网站的内容,但同时也会产生一些无关的链接,例如有些投机的人会考虑在文章中随意添加外部链接,如果你不想给这些外部链接传递权重,你需要给这些外部链接加上 rel=&qu ...

  5. 请求WebMethod, Ajax 处理更加专注

    在WebForm下 开发ajax程序,需要借助于一般处理程序(*.ashx)或web服务(*.asmx),并且每一个ajax请求,都要建一个这样的文件,如此一来,如 果在一个项目中ajax程序多了,势 ...

  6. git之常用指令

    参考:Git教程 - 廖雪峰的官方网站 1.git  //linux上检测是否安装git 2.sudo apt-get install git //linux上安装git 3.git config - ...

  7. php的字符串转2进制函数

    <?php $file1 = '16.jpg'; $file2 = 'test.txt'; $file3 = '47.jpg'; $size = filesize($file1); echo ' ...

  8. android常见问题(一)

    一:文本的颜色选择器: 在res目录下面创建color文件夹,在color文件夹下面创建font_style_colors.xml文件<?xml version="1.0" ...

  9. Entity Framework 之Database first(数据库优先)&Model First(模型优先)

    一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...

  10. 实战CentOS系统部署Hadoop集群服务

    导读 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高 ...