| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
写完程序,测完数据正确,然后提交一次ac,我的程序连调试都没有,真幸运#include<stdio.h>
#include<string.h>
#define max 10000
int prime[10000],dui[1000000],flag[10000],opt[10000];
int a,b;
void primeform()
{
int i,j;
for(i=2;i<10000;i++)
{
for(j=2;j<5000;j++)
{
if(i*j<10000)
{
prime[i*j]=1;//表示合数
}
}
}
}
void bfs(int a)
{
int rear=0,front=0,i,p,q,k,r,y,yu,x;
dui[rear]=a;
flag[a]=1;
opt[a]=0;
front++;
while(rear!=front)
{
x=dui[rear];
rear++;
p=x/1000;
yu=x%1000;
q=yu/100;
yu=yu%100;
r=yu/10;
k=yu%10;
for(i=p+1;i<10;i++)
{
y=i*1000+q*100+r*10+k;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=p-1;i>0;i--)
{
y=i*1000+q*100+r*10+k;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=q+1;i<10;i++)
{
y=p*1000+i*100+r*10+k;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=q-1;i>=0;i--)
{
y=p*1000+i*100+r*10+k;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=r+1;i<10;i++)
{
y=p*1000+q*100+i*10+k;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=r-1;i>=0;i--)
{
y=p*1000+q*100+i*10+k;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=k+1;i<10;i++)
{
y=p*1000+q*100+r*10+i;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
for(i=k-1;i>=0;i--)
{
y=p*1000+q*100+r*10+i;
if(prime[y]==0&&flag[y]==0)
{
dui[front]=y;
flag[y]=1;
opt[y]=opt[x]+1;
front++;
}
if(y==b)
{
printf("%d\n",opt[y]);
return ;
}
}
}
}
int main()
{
int i,n;
memset(prime,0,sizeof(prime));
primeform();
/*for(i=1000;i<10000;i++)
{
if(prime[i]==0)
{
printf("%d ",i);
}
}
printf("\n");*/
scanf("%d",&n);
for(i=0;i<n;i++)
{
memset(flag,0,sizeof(flag));
memset(opt,0,sizeof(opt));
scanf("%d%d",&a,&b);
bfs(a);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator