H - Prime Path
src="https://vjudge.net/problem/description/8032?1516175549000" width="100%" height="1504px" frameborder="0" scrolling="no" style="box-sizing: inherit;">
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int a, b, path[10005], prime[10005], book[10005], sum;
void bfs()
{
queue<int>q;
int c, d, temp, divide;
q.push(a);
while(!q.empty())
{
c=q.front(); q.pop();
if(c==b)
return ;
for(int i=1;i<=1000;i*=10)
{
divide=c;
divide/=i;
divide%=10;
temp=c-divide*i;
for(int j=0;j<10;j++)
{
if(i==1000 && j==0)
continue;
if(j!=divide)
{
d=i*j+temp;
if(!prime[d] && !book[d])
{
q.push(d);
path[d]=path[c]+1;
book[d]=1;
}
}
}
}
}
}
int main()
{
int t, i, j;
memset(prime, 0, sizeof(prime));
prime[0]=prime[1]=1;
for(i=2;i<100;i++)
for(j=i*i;j<10000;j+=i)
prime[j]=1;
scanf("%d", &t);
while(t--)
{
sum=0;
memset(path, 0, sizeof(path));
memset(book, 0, sizeof(book));
scanf("%d%d", &a, &b);
book[a]=1;
path[a]=0;
bfs();
printf("%d\n", path[b]);
}
return 0;
}