value_type该类型比前面介绍的容器所使用的元素类型要复杂得多,value_type 是存储元素的键以及值的pair类型,而且键为const。所以键初始化之后是不能再被赋值的
通俗的说value_type 就是stl容器盛装的数据的数据类型
#include<iostream>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
struct node{
int x;
int step;
int num[1000];
};
int n,m;
int vis[10100];
queue<node>q;
bool judge_prime(int x){
if(x==0||x==1){
return false;
}
else if(x==2||x==3){
return true;
}
else{
for(int i=2;i<=(int)sqrt(x);i++){
if(x%i==0){
return false;
}
return true;
}
}
}
void bfs(){
memset(vis,0,sizeof(vis));
node a;
a.x=n;
a.step=0;
q.push(a);
vis[a.x]=1;
while(!q.empty()){
a=q.front();
q.pop();
if(a.x==m){
cout<<a.step<<endl;
for(int i=1;i<=a.step;i++){
cout<<a.num[i]<<endl;
}
return ;
}
for(int i=1;i<=9;i++){
int X=a.x%1000+i*1000 ;
if(X!=a.x&&!vis[X]&&judge_prime(X)){
vis[X]=1;
a.x=X;
a.step++;
a.num[a.step]=X;
node b;
b=a;
q.push(b);
}
}
for(int i=0;i<=9;i++){
int X=a.x/1000*1000+a.x%100+i*100;
if(X!=a.x&&!vis[X]&&judge_prime(X)){
vis[X]=1;
a.x=X;
a.step++;
a.num[a.step]=X;
node b;
b=a;
q.push(b);
}
}
for(int i=0;i<=9;i++){
int X=a.x/100*100+a.x%10+i*10;
if(X!=a.x&&!vis[X]&&judge_prime(X)){
vis[X]=1;
a.x=X;
a.step++;
a.num[a.step]=X;
node b;
b=a;
q.push(b);
}
}
for(int i=1;i<=9;i+=2){
int X=a.x/10*10+i;
if(X!=a.x&&!vis[X]&&judge_prime(X)){
vis[X]=1;
a.x=X;
a.step++;
a.num[a.step]=X;
node b;
b=a;
q.push(b);
}
}
}
cout<<"Impossible!"<<endl;
return ;
}
print(node w){
for(int i=1;i<w.step;i++){
cout<<w.num[i]<<endl;
}
}
int main(){
int t;
cin>>t;
while(t--){
while(!q.empty()) q.pop();
cin>>n>>m;
bfs();
//print(bfs());
//print(bfs());
}
return 0;
}