首页 > 代码库 > POJ 3126 Prime Path

POJ 3126 Prime Path



很水的一个BFS,不过还是有坑点的,就是数都是大于1000的,我在千位时取过零,想了很久

不够细心啊!!!




AC代码如下:




#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;

struct H
{
    int x,s;
};

int sp[10005];
int vis[10005];
int dd[8]={1,10,100,1000};
int s,e;
int sx,ex,sy,ey;
int minn;

int bfs(int x)
{
    int i,j;
    queue<H>q;
    H a,b,c;
    a.x=x;
    a.s=0;
    q.push(a);
    while(!q.empty())
    {
        b=q.front();
        q.pop();
        if(b.x==e)
            return b.s;
        for(i=0;i<4;i++)
        {
            for(j=0;j<=9;j++)
            {
                int a;
                if(i==0)
                {
                    a=(b.x/10)*10;
                }
                if(i==1)
                {
                    a=(b.x/100)*100+b.x%10;
                }
                if(i==2)
                {
                    a=(b.x/1000)*1000+b.x%100;
                }
                if(i==3)
                {
                    a=b.x%1000;
                }
                if(i==3&&j==0)
                    continue;
                c.x=a+dd[i]*j;
                if(sp[c.x]==0&&!vis[c.x])
                {
                    vis[c.x]=1;
                    c.s=b.s+1;
                    q.push(c);
                }
            }
        }
    }
}

int main()
{
    int t;
    int i,j;
    memset(sp,0,sizeof sp);
    sp[1]=1;
    for(i=2;i<10005;i++)
        for(j=i;j*i<10005;j++)
        sp[i*j]=1;
    cin>>t;
    while(t--)
    {
        scanf("%d%d",&s,&e);
        memset(vis,0,sizeof vis);
        vis[s]=1;
        int ans=bfs(s);
        printf("%d\n",ans);
    }
    return 0;
}


POJ 3126 Prime Path