您的位置:首页 > 其它

POJ 3126 Prime Path(BFS)

2012-07-15 19:55 465 查看
题目链接

单步调试。。。各种调,1Y。

#include <stdio.h>
#include <string.h>
#include <math.h>
int prim[10000],o[10000];
int p[100000];
int main()
{
int i,j,k,n,m,z,t,start,end,num;
int c1,c2,c3,c4;
for(i = 1001;i <= 9999;i ++)
{
z = 1;
for(j = 2;j <= sqrt(i);j ++)
{
if(i%j == 0)
{
z = 0;
break;
}
}
if(z) prim[i] = 1;
}
/* for(i = 1001;i<= 9999;i ++)
if(prim[i])
printf("%d ",i);*/
scanf("%d",&t);
while(t--)
{
num = 0;z = 0;
memset(o,0,sizeof(o));
scanf("%d%d",&n,&m);
start = end = 1;
p[1] = n;o
= 1;
while(start <= end)
{
j = 1;
if(o[m])
{
z = 1;
break;
}
for(i = start;i <= end;i ++)
{
c1 = p[i] % 1000;
c2 = p[i]-c1/100*100;
c4 = p[i] - (p[i] % 10);
c3 = p[i]/100*100 + (p[i]%10);
for(k = 1;k <= 9;k ++)
{
if(prim[c1+k*1000]&&!o[c1+k*1000])
{
o[c1+k*1000] = 1;
p[end+j] = c1+k*1000;
j ++;
}
}
for(k = 0;k <= 9;k ++)
{
if(prim[c2+k*100]&&!o[c2+k*100])
{
o[c2+k*100] = 1;
p[end+j] = c2+k*100;
j ++;
}
}
for(k = 0;k <= 9;k ++)
{
if(prim[c3+k*10]&&!o[c3+k*10])
{
o[c3+k*10] = 1;
p[end+j] = c3+k*10;
j ++;
}
}
for(k = 0;k <= 9;k ++)
{
if(prim[c4+k]&&!o[c4+k])
{
o[c4+k] = 1;
p[end+j] = c4+k;
j ++;
}
}
}
start = end +1;
end = end + j -1;
num ++;
}
if(z)
printf("%d\n",num);
else
printf("Impossible\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: