http://poj.org/problem?

id=3126

题目大意:

给你两个四位的素数s和t,要求每次改变一个数字。使得改变后的数字也为素数,求s变化到t的最少变化次数。

思路:

首先求出全部4位素数。

对于两个素数之间,假设仅仅相差一个数字,那么就建立图。(双向)

最后求最短路就可以(能够SPFA也能够BFS)

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN=10000+10;
const int INF=0x3ffffff;
bool isprimer[MAXN];
int primer[MAXN],num;
int head[MAXN],len;
struct edge
{
int to,next;
}e[MAXN*10];
void add(int from,int to)
{
e[len].to=to;
e[len].next=head[from];
head[from]=len++;
}
//推断两个数仅有一个数字不同
bool judge(char *x,char *y)
{
int cnt=0;
for(int i=0;i<4;i++)
if(x[i]==y[i])
cnt++;
return cnt==3;
}
int dis[MAXN];
bool vis[MAXN];
int spfa(int s,int t)
{
for(int i=1000;i<=10000;i++)
{
dis[i]=INF;
vis[i]=0;
}
dis[s]=0;
vis[s]=true;
queue<int> q;
q.push(s);
while(!q.empty())
{
int cur=q.front();
q.pop();
for(int i=head[cur];i!=-1;i=e[i].next)
{
int to=e[i].to;
if(dis[cur]+ 1 < dis[to])
{
dis[to]=dis[cur]+1;
if(!vis[to])
q.push(to);
}
}
}
return dis[t];
} int main()
{
memset(head,-1,sizeof(head));
num=len=0; for(int i=2;i*i<MAXN;i++)
{
if(!isprimer[i])
for(int j=i;j*i<MAXN;j++)
isprimer[i*j]=true;
} for(int i=1000;i<10000;i++)
if(!isprimer[i])
primer[num++]=i; //printf("%d\n",num);
char cur[5],temp[5];
for(int i=0;i<num;i++)
{
sprintf(cur,"%d",primer[i]); // printf("%s\n",cur);
for(int j=i+1;j<num;j++)
{
sprintf(temp,"%d",primer[j]); if(judge(cur,temp))
{
add(primer[j],primer[i]);
add(primer[i],primer[j]);
}
}
} int T;
scanf("%d",&T);
while(T--)
{
int a,b;
scanf("%d%d",&a,&b);
if(isprimer[b])
{
printf("Impossible\n");
continue;
}
int ans=spfa(a,b);
if(ans==INF)
printf("Impossible\n");
else
printf("%d\n",ans);
}
return 0;
}

POJ 3126 Prime Path SPFA的更多相关文章

  1. 双向广搜 POJ 3126 Prime Path

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

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

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

  3. BFS POJ 3126 Prime Path

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

  4. poj 3126 Prime Path bfs

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

  5. POJ - 3126 - Prime Path(BFS)

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

  6. POJ 3126 Prime Path(BFS 数字处理)

    意甲冠军  给你两个4位质数a, b  每次你可以改变a个位数,但仍然需要素数的变化  乞讨a有多少次的能力,至少修改成b 基础的bfs  注意数的处理即可了  出队一个数  然后入队全部能够由这个素 ...

  7. (简单) POJ 3126 Prime Path,BFS。

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

  8. poj 3126 Prime Path(搜索专题)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20237   Accepted: 11282 Desc ...

  9. POJ 3126 Prime Path【从一个素数变为另一个素数的最少步数/BFS】

    Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted: 14555 Descript ...

随机推荐

  1. BZOJ 1407 exgcd

    思路: 数据范围不大.. 那我们就枚举M好了.. 再两两判断一下有没有冲突 怎么判断呢? exgcd!!! p[i]*k+c[i]=p[j]*k+c[j]  (mod m) (p[j]-p[i])*k ...

  2. Android高亮TextView

    HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 截图 Demo Java: public class Mai ...

  3. 怪异的Ubuntu

    怪异的Ubuntu 简单记录ubuntu上出现并且网上不好找到甚至压根找不到解决方案的疑难杂症. lvextend扩展逻辑卷的容量不能被系统检测到 问题发生在Ubuntu 16.04系统上. 逻辑卷/ ...

  4. 设置Hadoop的 dataNode的单个Map的内存配置

    1.进入hadoop的配置目录 ,找到 环境变量的 $HADOOP_HOME cd $HADOOP_HOME 2.修改dataNode 节点的 单个map的能使用的内存配置 找到配置的文件: /opt ...

  5. GraphicsMagick在centos环境的安装

    一.需要安装包libpng-1.6.2rc02.tar.gz,libjpeg-6b.tar.gz,GraphicsMagick-1.3.18.tar.gz,GraphicsMagick-1.3.18最 ...

  6. CMMI评估流程

    原文链接:http://www.cmmcn.com/new/cmmi-105.html 当前位置:首页 >> CMMI知识库 >> CMMI相关 >> CMMI评估 ...

  7. 【sqli-labs】 less30 GET- Blind -Impidence mismatch -Having a WAF in front of web application (GET型基于盲注的带有WAF注入)

    这次是双引号的,WAF绕过方法不变 http://192.168.136.128/sqli-labs-master/Less-30/login.php?id=1&id=2" and ...

  8. Bootstrap 模态框(Modal)带参数传值实例

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 为了实现父窗体与其的交互,通常需要向其传值,实现 ...

  9. .NET Framework 3.5 安装

    今天vCenter服务器悲剧了,只好火速重新部署新vCenter服务器... Windows server 2016 中,安装VCenter 5.5 提示  未安装 .NET Framework 3. ...

  10. linux系统下安装memcached

    检查libevent 首先检查系统中是否安装了libevent rpm -qa|grep libevent 如果安装了则查看libevent的安装路径,后续安装时需要用到 rpm -ql libeve ...