// An highlighted block
#include<iostream>
#include<queue>
#include<algorithm>
#include<string>
#include<vector>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int st, ed;
bool iszhshu[10000];
bool vis[10000];
bool jud(int ans)//暴力判断质数{
int t =pow(ans,0.5);for(int i =2; i <= t; i++){if(ans % i ==0)returnfalse;}returntrue;}voidget_zhishu()//先把四位数的质数标记{for(int i =1000; i <=9999; i++){if(jud(i)){iszhshu[i]=1;}}}
int matoi(char* p)//自己写字符串转整形{
int sum =0;for(int i =0; i <=3; i++)sum = sum *10+ p[i]-'0';return sum;}voidmitoa(char* p, int n)//自己写整形转字符串{for(int i =3; i >=0; i--){p[i]= n %10+'0'; n /=10;}}
int bfs(){
queue<int>Q;
int cnt =0;Q.push(st);
vis[st]=1;while(!Q.empty()){
int size =Q.size();for(int k =0; k < size; k++){
int t =Q.front();Q.pop();if(t == ed)return cnt;
char p[4];for(int i =0; i <4; i++)//循环四位{
int j=0;if(i ==0)j =1;//第一位不能取0for(; j <=9; j++){mitoa(p, t);//置为初始值
p[i]= j +'0';
int s =matoi(p);//改变一个位置的值if(iszhshu[s]&&!vis[s])//如果是质数且没被访问过{
vis[s]=1;Q.push(s);}}}}
cnt++;}return-1;}
int main(){get_zhishu();
int T;
cin >>T;for(int i =0; i <T; i++){memset(vis,0,10000);
cin >> st >> ed;
int cnt =bfs();if(cnt ==-1)printf("Impossible\n");elseprintf("%d\n", cnt);}return0;}```
标题POJ-3126首先筛选出1000到9999的质数,然后循环四位,判断是否为质数,是质数就入栈,最终找到ed// An highlighted block#include<iostream>#include<queue>#include<algorithm>#include<string>#include<vector>#include<cstring>#include<cstdio>#includ