POJ 3126 Prime Path 素数筛+bfs
Published on 2022-11-17 23:04 in 暂未分类 with 林动

POJ 3126 Prime Path 素数筛+bfs

    题目链接:http://poj.org/problem?id=3126

    #include <iostream>
    #include <time.h>
    #include<stdlib.h>
    #include<math.h>
    #include<cstdio>
    #include<queue>
    using namespace std;
    const int maxn=10010;
    bool vis[maxn];
    int prime[maxn/3];
    void prime_o(int n)
    {
        int x=0;
        for(int i=2;i<=n;i++)
        {
            if(vis[i]==0)prime[x++]=i;
            for(int j=0;j<x;j++)
            {
                if(i*prime[j]>n)break;
                vis[i*prime[j]]=1;
                if(i%prime[j]==0)break;
            }
        }
    }
    struct node 
    {
        int x;
        int step;
    };
    int changone(int v,int wei,int num)
    {
        if(wei==1)
        {
            return v/10*10+num;
        }
        if(wei==2)
        {
            return v/100*100+num*10+v%10;
        }
        if(wei==3)
        {
            return v/1000*1000+num*100+v%100;
        }
        if(wei==4)
        {
            return num*1000+v%1000;
        }
    }
    int bfs(int s,int e)
    {
        node a;
        bool vis2[maxn]={0};
        a.x=s;
        a.step=0;
        queue<node> q;
        vis2[a.x]=1;
        q.push(a);
        while(!q.empty())
        {
            a=q.front();
            q.pop();
            if(a.x==e)return a.step;
            for(int i=1;i<=4;++i)
            {
                int t=a.x;
                int st=a.step;
                for(int j=0;j<=9;++j)
                {
                    a.x=changone(a.x,i,j);
                    a.step=st+1;
                    if(vis2[a.x]==0&&vis[a.x]==0&&a.x>=1000&&a.x<=9999)
                    {
                        vis2[a.x]=1;
                        q.push(a);
                    }
                    
                }
                a.x=t;
                a.step=st;
            }
        }
        return -1;
    }
    int main()
    {
        prime_o(10000);
        int n,a,b;
        cin>>n;
        while(n--)
        {
            cin>>a>>b;
            int ans=bfs(a,b);
            if(ans>=0)
            {
                cout<<ans<<endl;
            }
            else
            {
                cout<<"Impossible"<<endl;
            }
        }
          return 0;
    }
    
    posted @   林动  阅读(23)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
    · Manus的开源复刻OpenManus初探
    · AI 智能体引爆开源社区「GitHub 热点速览」
    · C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
    · 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
    点击右上角即可分享
    微信分享提示