题意为给出两个四位素数A、B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B。可以直接进行BFS搜索

 #include<bits/stdc++.h>
using namespace std; bool isPrime(int n){//素数判断
if(n == || n == ) return true;
else{
int k = sqrt(n) + ;
for(int i = ; i < k; i++){
if(n % i == ) return false;
}
return true;
}
} bool Prime[];
int visit[];
void getPrime(){
for(int i = ; i < ; i++){
if(isPrime(i))Prime[i] = true;
}
} struct Node{
int num;//储存数字
int cost;//操作步数
}; Node bfs(int start, int end){
queue<Node> q;
Node front;
front.num = start;
front.cost = ;
visit[start] = ;
q.push(front);
while(!q.empty()){
front = q.front(); q.pop(); for(int i = ; i < ; i++){//换千位
int m = front.num;
m = m % + i * ;
if(!visit[m] && Prime[m]){
visit[m] = ;
Node tmp = front;
tmp.num = m;
tmp.cost++;
q.push(tmp); if(m == end)return tmp;
}
} for(int i = ; i < ; i++){//换百位
int m = front.num;
m = m % + (m/) * + i * ;
if(!visit[m] && Prime[m]){
visit[m] = ;
Node tmp = front;
tmp.num = m;
tmp.cost++;
q.push(tmp); if(m == end)return tmp;
}
} for(int i = ; i < ; i++){//换十位
int m = front.num;
m = m % + (m/) * + i * ;
if(!visit[m] && Prime[m]){
visit[m] = ;
Node tmp = front;
tmp.num = m;
tmp.cost++;
q.push(tmp);
if(m == end)return tmp;
}
} for(int i = ; i < ; i++){//换个位
int m = front.num;
m = (m/) * + i;
if(!visit[m] && Prime[m]){
visit[m] = ;
Node tmp = front;
tmp.num = m;
tmp.cost++;
q.push(tmp); if(m == end)return tmp;
}
}
}
Node tmp;
tmp.num = ;
tmp.cost = ;
return tmp;
}
int main(){
int n;
cin >> n;
getPrime();
while(n--){
int a, b;
cin >> a >> b;
Node tmp;
memset(visit, , sizeof(visit));
tmp = bfs(a, b);
if(tmp.num == && tmp.cost == ) cout << << endl;
else{
cout << tmp.cost << endl;
}
}
}

最新文章

  1. c#Ice开发之环境配置(一)
  2. [转]ASP.NET MVC IOC 之AutoFac攻略
  3. domReady方法(dom加载完成执行回调)
  4. 详细学习ORACLE JOBS
  5. spring中配置了事务,数据业务层捕获异常,事务配置不成功?
  6. 比较HTML元素和Native组件的区别
  7. Linux Shell编程一
  8. HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)
  9. Hello Word!
  10. Java List 汉字进行排序
  11. UVA 11174 Stand in a Line 树dp+算
  12. 从头到尾彻底理解KMP(转)
  13. 扩展欧几里得 POJ 1061
  14. request.getParameter()与request.setAttribute()的区别 (转载)
  15. 【NOIP2009提高组】最优贸易
  16. Linux 离线安装Rubygems详解
  17. Hi3531添加16GByte(128Gbit) NAND Flash支持
  18. 常用SQL Server命令(持续) | Commonly used SQL Server command list (Cont&#39;)
  19. Linux内存管理 (14)匿名页面生命周期
  20. TensorFlow从入门到理解(一):搭建开发环境【基于Ubuntu18.04】

热门文章

  1. ZooKeeper 笔记(6) 分布式锁
  2. [原]CentOS7 部署GeoServer2.92
  3. [LeetCode] Symmetric Tree 判断对称树
  4. D3D三层Texture纹理经像素着色器实现渲染YUV420P
  5. 彻底搞懂编码 GBK 和 UTF8
  6. Dapper学习笔记(一)
  7. ant windows环境配置
  8. list,tuple,dict,set常用方法
  9. Spring在非web应用中关闭IoC容器 (registerShutdownHook)
  10. oracle db link的查看创建与删除