博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3126 Prime Path bfs求最短路
阅读量:5290 次
发布时间:2019-06-14

本文共 2557 字,大约阅读时间需要 8 分钟。

题目地址: 

题目大意: 每次只允许变动一位 求最少变动多少次可以把一个四位素数变为另一个四位素数。

还是直接bfs求最短路,每个素数是一个节点,判断是否相邻用枚举的方法,分别枚举个十百千位。 记得layer[next] = layer[cur]+1; 所以取出每一位的时候要用cur的副本

代码:

#include
#include
#include
#include
using namespace std;int vis[10000];int p[10000];int layer[10000];void pre(){ p[0]=1; p[1]=1; for(int i=2;i<10000;i++) if(p[i]==0) for(int j=i*i;j<10000;j+=i) { p[j]=1; } }void init(){ memset(vis,0,sizeof(vis)); memset(layer,0,sizeof(layer));}int a,b;int bfs(){ queue
q; q.push(a); vis[a]=1; layer[a]=0; while(!q.empty()) { int cur=q.front(); int cur_cpy=cur; q.pop(); int t[4]; for(int i=3;i>=0;i--) { t[i]=cur_cpy%10; cur_cpy/=10; } // 枚举个位 for(int i=0;i<=9;i++) { int next=i; next+=t[0]*1000+t[1]*100+t[2]*10; if(p[next]==0&&vis[next]==0) { q.push(next); vis[next]=1; layer[next]=layer[cur]+1; if(next==b) return layer[next]; } } // 枚举十位 for(int i=0;i<=9;i++) { int next=i*10; next+=t[0]*1000+t[1]*100+t[3]; if(p[next]==0&&vis[next]==0) { q.push(next); vis[next]=1; layer[next]=layer[cur]+1; if(next==b) return layer[next]; } } // 枚举百位 for(int i=0;i<=9;i++) { int next=i*100; next+=t[0]*1000+t[2]*10+t[3]; if(p[next]==0&&vis[next]==0) { q.push(next); vis[next]=1; layer[next]=layer[cur]+1; if(next==b) return layer[next]; } } // 枚举千位 for(int i=1;i<=9;i++) { int next=i*1000; next+=t[1]*100+t[2]*10+t[3]; if(p[next]==0&&vis[next]==0) { q.push(next); vis[next]=1; layer[next]=layer[cur]+1; if(next==b) return layer[next]; } } } return -1;}int main(){ pre(); int n; cin>>n; for(int l=0;l
>a>>b; if(a==b) cout<<0<

转载于:https://www.cnblogs.com/jingqi814/p/3581539.html

你可能感兴趣的文章
简单几行js实现tab选项切换效果
查看>>
关于更改滚动条样式
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
[转帖] Oracle 关闭自动收集统计信息
查看>>
三.野指针和free
查看>>
VIO的Bundle Adjustment推导
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
asp.net FileUpload控件文件格式的判断及文件大小限制
查看>>
angular(1.5.8)
查看>>
h5的video标签支持的视频格式
查看>>
大数据没那么重要
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
学android:直接用jdk来helloworld
查看>>
Access Jira RESTful API by cURL
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
Spark基础脚本入门实践3:Pair RDD开发
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理
查看>>