#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
int map[10000];
bool prime[10005];
int a,b;
queue <int> qq;
void bfs()
{
while ( !qq.empty() )
{
int point=qq.front();
if (point==b) { return ; }
int i,tmp=point;
for (i=0;i<=9;i++)
{
int s=tmp/10*10+i;
if (s!=tmp && prime[s]==false && map[s]==0)
{
qq.push(s);
map[s]=map[tmp]+1;
}
}
for (i=0;i<=9;i++)
{
int s=tmp/100*100 +i*10 + tmp%10;
if (s!=tmp && prime[s]==false && map[s]==0)
{
qq.push(s);
map[s]=map[tmp]+1;
}
}
for (i=0;i<=9;i++)
{
int s=tmp/1000*1000+i*100 + tmp%100;
if (s!=tmp && prime[s]==false && map[s]==0)
{
qq.push(s);
map[s]=map[tmp]+1;
}
}
for (i=1;i<=9;i++)
{
int s=tmp%1000+i*1000;
if (s!=tmp && prime[s]==false && map[s]==0)
{
qq.push(s);
map[s]=map[tmp]+1;
}
}
qq.pop();
}
return ;
}
int main()
{
int i,t,j;
prime[1]=true;
for(i=2;i<=10000;i++)
{
if (prime[i]==false)
{
for (j=(__int64)i*i;j<=10000;j+=i)
{
prime[j]=true;
}
}
}
scanf("%d",&t);
for (j=1;j<=t;j++)
{
scanf("%d%d",&a,&b);
while ( !qq.empty() )
{
qq.pop();
}
memset(map,0,sizeof(map));
int tmp=a;
map[a]=1;
qq.push(a);
bfs();
if (map[b]==0) printf("Impossible\n");
else
printf("%d\n",map[b]-1);
}
return 0;
}
A - Prime Path
最新推荐文章于 2022-10-07 17:34:17 发布