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 ...
随机推荐
- 分别使用Hadoop和Spark实现TopN(1)——唯一键
0.简介 TopN算法是一个经典的算法,由于每个map都只是实现了本地的TopN算法,而假设map有M个,在归约的阶段只有M x N个,这个结果是可以接受的并不会造成性能瓶颈. 这个TopN算法在ma ...
- windbg将调试信息保存到文本文件
在跟踪一些出现频率较低的问题时,有时候需要长时间调试,但是在在输出信息太多时可能前面的日志会被清空,为避免这种情况,可以将输出日志记录到文本文件以备查看. 1. 可以在启动时直接用带 -logo的命令 ...
- 联想VIBE Shot(Z90-7/全网通) 解锁BootLoader
工具下载链接: http://pan.baidu.com/s/1dF7zGTb 备用下载链接: http://pan.baidu.com/s/1i4UHP4L 本篇教程教你如何傻瓜式解锁BootLoa ...
- NetCore下获取项目文件路径
我要获取的是doc/FPFile.xml 百度了一大堆就是找不到解决问题. 把属性更改为始终赋值, XmlDocument xdi = new XmlDocument(); xdi.Load((&qu ...
- CDC之Synchronizers
1 Scenarios Two scenarios for passing signals across CDC boundaries: 1) sometimes it's not necessary ...
- ROS: Ubuntu16.04安装ROS-kinetic
参考连接:SLAM: Ubuntu14.04_Kylin安装ROS-Indigo第一步: 软件源配置 1. 增加下载源(增加ubuntu版的ros数据仓库,即下载源)(通用指令适合任何版本的ros) ...
- 大型工程多个目录下的Makefile写法
1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Ma ...
- windows10上安装mysql详细图文教程
在windows10上安装mysql详细图文教程 这篇文章主要介绍了在windows10上安装mysql详细图文教程,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧 环境:windw ...
- eas之打开窗体
UIContext uiContext=new UIContext(this);IUIWindow uiWindow=UIFactory.createUIFactory(UIFactoryName.E ...
- eas之获得任何一个KDTable的选中行
import com.kingdee.bos.ctrl.kdf.table.util.KDTableUtil; int[] selectRows =KDTableUtil.getSelectedRow ...