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;
}
#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;
}
相关文章推荐
- POJ 3126 Prime Path(素数打表+bfs)
- POJ 3126 Prime Path (BFS)
- POJ 3126 Prime Path (素数筛选+bfs)
- POJ 3126 Prime Path
- POJ 3126 Prime Path BFS 广度优先搜索 素数
- (水)POJ-3126 BFS,埃式筛选及黑科技
- BFS变换素数,POJ(3126)
- POJ 3126 Prime Path【素数+bfs】
- POJ-3126-Prime Path
- poj 3126 prime path
- POJ 3126 Prime Path(基础搜索)
- Poj 3126 Prime Path
- POJ 3126 Prime Path(BFS 数字处理)
- POJ 3126 Prime Path
- 个位数字poj - 3126 - Prime Path
- 【poj 3126】Prime Path 题意&题解&代码(C++)
- POJ-3126-Prime Path【BFS】
- Prime Path poj bfs 3126
- POJ3126——BFS——Prime Path
- poj 3126 BFS