Poj 3126 Prime Path (BFS+筛素数)
#include<iostream> #include<queue> #include<cstring> const int N=10010; int t,aa,bb,prime[N],vis[N],step[N]; using namespace std; void prime_(){ //埃式筛法 prime[0]=prime[1]=1; for(int i=2;i<10000;i++){ if(prime[i]) continue; for(int j=i*2;j<10000;j+=i){ prime[j]=1; } } } void bfs(int aa,int bb){ queue<int> q; int a,b,c,d,s,x; q.push(aa); while(!q.empty()){ x=q.front(); q.pop(); if(x==bb){ cout<<step[x]<<endl; return ; } a=x/1000; //千 b=(x/100)%10; //百 c=(x%100)/10;//十 d=x%10;//个 for(int i=1;i<=9;i++){ //枚举千位 if(i==a) continue; s=i*1000+b*100+c*10+d; if(prime[s]==0 && !vis[s]){ vis[s]=1; step[s]=step[x]+1; q.push(s); } } for(int i=0;i<=9;i++){ //枚举百位 if(i==b) continue; s=a*1000+i*100+c*10+d; if(prime[s]==0 && !vis[s]){ vis[s]=1; step[s]=step[x]+1; q.push(s); } } for(int i=0;i<=9;i++){ //枚举十位 if(i==c) continue; s=a*1000+b*100+i*10+d; if(prime[s]==0 && !vis[s]){ vis[s]=1; step[s]=step[x]+1; q.push(s); } } for(int i=0;i<=9;i++){ //枚举个位 if(i==d) continue; s=a*1000+b*100+c*10+i; if(prime[s]==0 && !vis[s]){ vis[s]=1; step[s]=step[x]+1; q.push(s); } } } } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); prime_(); cin>>t; while(t--){ cin>>aa>>bb; memset(vis,0,sizeof(vis)); memset(step,0,sizeof(step)); bfs(aa,bb); } return 0; }
18:17:10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)