poj 3126(bfs模板题)
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; queue<int>q; int prime[9999],k,pre[9999]; int data[9999]; void getPrime(){ memset(prime,0,sizeof prime); bool flag; for(int i=1001;i<10000;i+=2){ flag = true; for(int j=2;j<=sqrt((double)i);j++){ if(i%j==0)flag = false; } if(flag)prime[i] = 1; } } //bool isSwap(int a,int b){ // if(a/10==b/10)return true; // if(a%10==b%10&&a/100==b/100)return true; // if(a%100==b%100&&a/1000==b/1000)return true; // if(a%1000==b%1000)return true; // return false; //} void swapPrime(int a,int b){ int i,j,t; memset(data,-1,sizeof data); q.push(a); data[a] = 0; while(!q.empty()){ t = q.front();q.pop(); if(t==b){ printf("%d\n",data[t]); while(!q.empty()){ q.pop(); } return; } for(i=1;i<10;i+=2){ j = t-t%10+i; if(prime[j]==1&&data[j]==-1){ data[j] = data[t]+1; q.push(j); } } for(i=0;i<10;i++){ j = t/100*100+t%10+i*10; if(prime[j]==1&&data[j]==-1){ data[j] = data[t]+1; q.push(j); } } for(i=0;i<10;i++){ j = t/1000*1000+t%100+i*100; if(prime[j]==1&&data[j]==-1){ data[j] = data[t]+1; q.push(j); } } for(i=1;i<10;i++){ j = t%1000+i*1000; if(prime[j]==1&&data[j]==-1){ data[j] = data[t]+1; q.push(j); } } } } using namespace std; int main(){ int a,b,n; scanf("%d",&n); getPrime(); while(n--){ scanf("%d%d",&a,&b); swapPrime(a,b); } return 0; }
分类:
POJ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)