您的位置:首页 > 其它

poj 3126

2010-04-05 14:09 351 查看
一道广搜的题 上学期写的~写得很神奇 我觉得~

#include <iostream>

#include <cmath>

using namespace std;

bool p[10000];

void isprime() //素数打表

{

int j,k,t;

memset(p,false,sizeof(p));

for(k=1001;k<10000;k=k+2)

{

t=int(sqrt(double(k)))+1;

for(j=3;j<t;j++)

if(k%j==0)

break;

if(j==t)

p[k]=true;

}

}

int main()

{

int N;

int n1,n2,front,rear,t,t1,t2,i,times;

int a[1100][2];

bool app[10000];

isprime();

scanf("%d",&N);

while(N--)

{

scanf("%d%d",&n1,&n2);

memset(app,false,sizeof(app));

front=0; rear=1;

app[n1]=true;

a[front][0]=n1;

a[front][1]=0;

while(app[n2]==false && front!=rear)

{

t=a[front][0];

t1=t+1000;

while(t1<10000) //千位的加

{

if(p[t1] && !app[t1]) // 是否为素数 是则入队

{

a[rear][0]=t1;

a[rear][1]=a[front][1]+1;

app[t1]=true;

rear++;

}

t1+=1000;

}

t1=t-1000;

while(t1>=1000) //千位的减

{

if(p[t1] && !app[t1])

{

a[rear][0]=t1;

a[rear][1]=a[front][1]+1;

app[t1]=true;

rear++;

}

t1-=1000;

}

t1=(t/1000)*1000;

t2=t+100;

while(t2<t1+1000) //百位的加

{

if(p[t2] && !app[t2]) // 是否为素数 是则入队

{

a[rear][0]=t2;

a[rear][1]=a[front][1]+1;

app[t2]=true;

rear++;

}

t2+=100;

}

t2=t-100;

while(t2>t1) //百位的减

{

if(p[t2] && !app[t2])

{

a[rear][0]=t2;

a[rear][1]=a[front][1]+1;

app[t2]=true;

rear++;

}

t2-=100;

}

t1=(t/100)*100;

t2=t+10;

while(t2<t1+100) //十位的 加

{

if(p[t2] && !app[t2])

{

a[rear][0]=t2;

a[rear][1]=a[front][1]+1;

app[t2]=true;

rear++;

}

t2+=10;

}

t2=t-10;

while(t2>t1) //十位的减

{

if(p[t2] && !app[t2])

{

a[rear][0]=t2;

a[rear][1]=a[front][1]+1;

app[t2]=true;

rear++;

}

t2-=10;

}

t1=(t/10)*10;

t2=t+2;

while(t2<t1+10) //个位的加

{

if(p[t2] && !app[t2])

{

a[rear][0]=t2;

a[rear][1]=a[front][1]+1;

app[t2]=true;

rear++;

}

t2+=2;

}

t2=t-2;

while(t2>t1) //个位的减

{

if(p[t2] && !app[t2])

{

a[rear][0]=t2;

a[rear][1]=a[front][1]+1;

app[t2]=true;

rear++;

}

t2-=2;

}

front++;

}

if(front==rear)

printf("Impossible/n");

else

printf("%d/n",a[--rear][1]);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: