UVA12101 Prime Path
Prime Path
题面翻译
给你个整数
每次给你俩数 Impossible
。
规定
例如:
题目描述
输入格式
输出格式
样例 #1
样例输入 #1
3 1033 8179 1373 8017 1033 1033
样例输出 #1
6 7 0
思路
由题意,可得题目大致分为两部分:质数筛和BFS.
然后就套模版就行了,一个比较水的BFS模版题。
代码实现
#include<bits/stdc++.h> using namespace std; vector<int> p; bool not_prime[10005]; bool v[10002]; int ans=0; int n,m; int k[5]; void pri(int k) { for(int i=2;i<=k;i++) { if(!not_prime[i]) { p.push_back(i); } for(int _pri:p) { if(i*_pri>k) break; not_prime[i*_pri]=true; if(i%_pri==0) break; } } } void into(int x) { memset(k,0,sizeof(k)); k[1]=x/1000; k[2]=x/100%10; k[3]=x/10%10; k[4]=x%10; } int outto() { return k[1]*1000+k[2]*100+k[3]*10+k[4]; } void bfs() { memset(v,false,sizeof(v)); queue<pair<int,int>> q; pair<int,int> p; p.first=n,p.second=0; q.push(p); v[n]=true; while(!q.empty()) { int x=q.front().first,y=q.front().second; q.pop(); if(x==m) { cout<<y<<endl; return ; } into(x); for(int i=1;i<=4;i++) { for(int j=0;j<=9;j++) { if(i==1&&j==0) { continue; } int t=k[i]; k[i]=j; pair<int,int> _new; _new.first=outto(); _new.second=y+1; if(!v[_new.first]&&!not_prime[_new.first]) { v[_new.first]=true; q.push(_new); } k[i]=t; } } } cout<<"Impossible."<<endl; } int main() { ios::sync_with_stdio(false); memset(not_prime,0,sizeof(not_prime)); pri(10000); int t; cin>>t; while(t--) { cin>>n>>m; bfs(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话