七月十九日学习笔记

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;
} 

猜你喜欢

转载自blog.csdn.net/Helloirbd/article/details/81108741
今日推荐