【SPFA】 素数路

这是一篇关于使用SPFA算法解决从一个四位素数到另一个四位素数的最短路径问题的博客,其中每次操作只能修改一位数字且保持结果为素数。文章通过一个有趣的场景引入,描述了如何构建图并寻找最短路径,最终给出了一种从1033变化到8179的最短方案,共需6步。
摘要由CSDN通过智能技术生成

题目描述

内阁大臣非常的沮丧,他收到了安全部长的消息:他们都需要改变办公空的四位房间号码。

安全部长:经常换换房间号码是出于安全方面的考虑,可以让敌人陷入迷惑。

内阁大臣:但是,我选择1033作为我的房间号是出于我个人的偏爱。我可是内阁大臣!

安全部长:你不就是喜欢素数么?我们给你安排了8179这个号码,你只需要贴四个新数字覆盖住以前的四个老数字就可以了。

内阁大臣:不行,没有那么容易。当我把1033的1用8盖住的时候,8033可不是个素数!

安全部长:我知道,你不能允计你的门上出现非素数。

内阁大臣:正确!所以我必须找到一个方法从1033修改到8179,使得过程中门上出现的永远是素数,而且每次只能够修改当前数字的一位。

这个叫候,在旁边偷听的财政大臣忍不住来插嘴。

财政大臣:千万不要为了这么个事情增加不必要的开支!我知道换一个数字就是要化一镑!

内阁大臣:那我需要一个计算机来规划一下。

财政大臣:我够够帮你!

现在这个任务就交给你了。你要从一个四位的素数出发,每次修改其中的一位,并且要保证修改的结果还是一个素数,还不能出现前导零。你要找到一个修改次数最少的方案,得到我们所需要的素数。

关于1033怎么变到8179,这里是一个最短的方策:

1033

1733

3733

3739

3779

8779

8179

修改了6次,所以要花6镑。

输入输出格式

输入格式:

一行,两个四位的素数(没有前导零),表示初始数和目标数。

输出格式:

一个数,表示最少的操作次数。如果不可能,输出“Impossible”。

输入输出样例

输入样例#1:

1033 8179

输出样例#1:
6

分析

刚开始看到这道题以为是深搜,后来才知道其实是图论题。

我们很容易想到  把1000至9999内的质数当成点

将这些点两两比较  如果这两个数之间有且仅有一位数字相同 则将这两个点用边权为1的边连起来

这样处理之后  次数最少的更换方式就变成了 求起点到终点的最短路

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#define
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值