POJ 3126 Prime Path SPFA
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的更多相关文章
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- 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,数据有点弱 */ /**** ...
- 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(BFS)
Prime Path POJ - 3126 题意: 给出两个四位素数 a , b.然后从a开始,每次可以改变四位中的一位数字,变成 c,c 可以接着变,直到变成b为止.要求 c 必须是素数.求变换次数 ...
- POJ 3126 Prime Path(BFS 数字处理)
意甲冠军 给你两个4位质数a, b 每次你可以改变a个位数,但仍然需要素数的变化 乞讨a有多少次的能力,至少修改成b 基础的bfs 注意数的处理即可了 出队一个数 然后入队全部能够由这个素 ...
- (简单) POJ 3126 Prime Path,BFS。
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
- poj 3126 Prime Path(搜索专题)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20237 Accepted: 11282 Desc ...
- POJ 3126 Prime Path【从一个素数变为另一个素数的最少步数/BFS】
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted: 14555 Descript ...
随机推荐
- C - Football
Problem description Petya loves football very much. One day, as he was watching a football match, he ...
- struts2结果处理、获取参数(二)
结果处理 1.转发 type可以不写,默认就是转发 <package name="hello" namespace="/hello" extends=&q ...
- Android studio 添加引用新建类库
1.新建一个工程包 2.修改AndroidManifest.xml 将AndroidManifest.xml 修改为 <manifest xmlns:android="http://s ...
- VMWare 安装Centos 6.9
1.新建虚拟机 (1)点击文件-->新建虚拟机 (2)选择 自定义(高级)--> 下一步 (3)选择Workstation 12.0 --> 下一步 (4)选择 稍后安装操作系统 - ...
- 《Java编程思想》学习笔记(一)
1——面向对象和JVM基础 1.java中的4种访问制权限: (1).public:最大访问控制权限,对所有的类都可见. (2).protect:同一包可见,不在同一个包的所有子类也可见. (3). ...
- (转)基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
http://www.cnblogs.com/wuhuacong/p/4761637.html 在上篇<基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JST ...
- Java Web_过滤器
过滤器分类: Servlet2.5: request:用户直接访问页面时,Web容器将会调用过滤器. forward:目标资源是通过RequestDispatcher的forward访问时,该过滤器将 ...
- 很实用的html meta标签实现页面跳转
就算你是有很多年开发经验的web开发工程师,有着很多web开发经验,对于先进的web开发技术有着很深刻的研究,然而你却忽略了那些最最基础的东西!现在我来问你,你是否对html所有的标签都能熟练的使用呢 ...
- MessageFormat.format()用法
1.java.text.Format的继承结构如下 2.MessageFormat模式 FormatElement { ArgumentIndex }:是从0开始的入参位置索引 { Argumen ...
- VBS正则表达式
删除字符串中指定的内容 Dim pathStr, newPathStr pathStr = "c:\windows;%My%\tool;e:\test;%Tg%\ff;d:\mm" ...