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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异