题目:http://poj.org/problem?id=3126

题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素数;

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<iomanip>
#include<cmath>
#include<map>
#include<vector>
#include<algorithm>
using namespace std; int p[],vis[];
int a,b,t;
struct node
{
int a,step;
}pos,next;
void prime() //快速求素数的模板
{
int i,j;
memset(p,-,sizeof(p));
p[]=p[]=; for(i=; i<; i++)
{
if(i%==) p[i]=;
if(p[i])
for(j=i*; j<; j+=i)
p[j]=;
}
}
int change(int x,int i,int j) //i代表改变哪一位(个十百千),j代表改变为几,x是原数
{
if(i==) return (x/)*+j;
else if(i==) return (x/)*+x%+j*;
else if(i==) return (x/)*+x%+j*;
else if(i==) return (x%)+j*;
return ;
}
void bfs()
{
int i,j;
queue<node>q;
next.a=a; next.step=;
vis[a]=;
q.push(next);
while(!q.empty())
{
pos=q.front();
q.pop();
next.step=pos.step+;
for(i=; i<=; i++)
for(j=; j<; j++)
{
if(i==&&j==)
continue;
next.a=change(pos.a,i,j);
if(next.a==b)
{
cout<<next.step<<endl;
return;
}
if(p[next.a]&&!vis[next.a])
{
q.push(next); vis[next.a]=;
}
}
}
cout<<"Impossible"<<endl;
}
int main()
{
prime();
cin>>t;
while(t--)
{
memset(vis,,sizeof(vis));
cin>>a>>b;
if(a==b)
{
cout<<""<<endl;
continue;
}
bfs();
}
return ;
}

最新文章

  1. Win7(x64)升级到Win10
  2. php 路径
  3. 设置CentOS不启用图形界面
  4. Lab_6_SysOps_AutoScaling_Linux_v2.5
  5. 【摘】 pt-query-digest工具一解
  6. bigworld源码分析(3)——dbMgr分析
  7. [整理]PCB阻抗控制
  8. python多线程生成缩略图
  9. onSaveInstanceState和onRestoreInstanceState
  10. Two Sum 解答
  11. AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示
  12. HDU 2393 Higher Math
  13. SQL Server 中截取字符串常用的函数
  14. Java核心技术 对象与类
  15. Java 读取 txt 文件内容到容器 List
  16. Mysql Binlog三种格式详细介绍
  17. Mysql索引基础原理
  18. GIT 分布式版本控制系统的简单使用介绍
  19. Java对象与Map间相互转换
  20. bzoj 4097: [Usaco2013 dec]Vacation Planning

热门文章

  1. laravel扩展Debugbar
  2. javascript insertBefore 和 appendChild
  3. FragmentActivity和Activity的具体区别在哪里
  4. Oracle SQL的硬解析、软解析、软软解析
  5. VB语言基础
  6. Java中的IO流系统详解
  7. python学习笔记3(字符串)
  8. iOS视频压缩存储至本地并上传至服务器-b
  9. c++ 读写锁
  10. java模拟OSUnMapTbl[]