Prime Path (广搜(水))
来源:互联网 发布:阿里云com域名注册 编辑:程序博客网 时间:2024/06/06 04:24
题目来源:https://vjudge.net/contest/159739#problem/F
【题意】
依次给出两个四位数,均为素数,问,每次改变前一个四位数的任意位数上的数字,并且保证改的过程中出现的数字依旧是素数,能不能由前一个数推出后一个数。若可行,输出需要改多少次,若不可行,输出Impossible。
【思路】
首先想到的是深搜,并且也实现了,实现之后才发现,题目要求求得最少步数,也就是说深搜过程要每一步都要搜完,,,不超时才怪,,,然后想到广搜的话,每一步都是一样的,只要找到,那就是最少步数,所以,此题用广搜比较适合。
下面是思路:首先打出1000~10000的素数表,加以判断,然后每次广搜都所有可能的情况搜索一遍,压到队列中,加已标记(不能重复走同一条路)。
【代码】我的代码比较长,但时间我想是最短的。
#include<stack>#include<queue>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<iostream>#include<string>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long LL;int prime[10000+10];bool vis[10000+10];struct djh{ int mid,step;} q1,q2;int st,ed;int bfs(){ queue<djh> q; q1.mid=st; q1.step=0; vis[q1.mid]=1; q.push(q1); while(!q.empty()) { q1=q.front(); q.pop(); for(int j=0; j<=9; j++) { if(j!=0) { if(j!=(q1.mid/1000)) { q2.mid=q1.mid%1000+j*1000; if(!prime[q2.mid]&&!vis[q2.mid]) { vis[q2.mid]=1; if(q2.mid==ed) return q1.step+1; q2.step=q1.step+1; q.push(q2); } } } if(j!=(q1.mid/100%10)) { q2.mid=q1.mid%100+j*100+(q1.mid/1000)*1000; if(!prime[q2.mid]&&!vis[q2.mid]) { vis[q2.mid]=1; if(q2.mid==ed) return q1.step+1; q2.step=q1.step+1; q.push(q2); } } if(j!=(q1.mid/10%10)) { q2.mid=q1.mid%10+j*10+(q1.mid/100)*100; if(!prime[q2.mid]&&!vis[q2.mid]) { vis[q2.mid]=1; if(q2.mid==ed) return q1.step+1; q2.step=q1.step+1; q.push(q2); } } if(j!=q1.mid%10) { q2.mid=q1.mid/10*10+j; if(!prime[q2.mid]&&!vis[q2.mid]) { vis[q2.mid]=1; if(q2.mid==ed) return q1.step+1; q2.step=q1.step+1; q.push(q2); } } } } return -1;}int main(){ for(int i=2; i<=100; i++)//素数打表 if(!prime[i]) for(int j=2*i; j<=10000; j+=i) prime[j]=1; int T; scanf("%d",&T); while(T--) { mem(vis,0); scanf("%d%d",&st,&ed); if(st==ed) { printf("0\n"); continue; } int ans=bfs(); ans==-1?printf("Impossible\n"):printf("%d\n",ans); }}
0 0
- Prime Path (广搜(水))
- Prime Path(广搜)
- Prime Path(广搜)
- Prime Path (广搜)
- poj 3126 Prime Path(广搜)
- POJ 3126 Prime Path(经典广搜BFS)
- poj3126--Prime Path(广搜)
- 【poj 3126】 Prime Path 广搜
- POJ 3126 Prime Path( 广搜 )
- poj3126 Prime Path (广搜) 题解
- 广搜 BFS POJ 3126 Prime Path
- POJ3126 Prime Path(广搜BFS)
- POJ-3126--Prime Path---BFS广搜
- 广搜BFS prime path+广搜总结
- Prime Path(poj3126)
- Prime Path(bfs)
- Prime Path(bfs)
- Prime Path--(bfs)
- 简单文件上传 下载 线程处理
- 局域网下大文件互传
- 跳个“一切从头开始”的槽,还来得及吗
- ACM文件测试数据及文件操作
- .bat 批处理脚本
- Prime Path (广搜(水))
- App端与服务器之间的安全策略
- 关于MySQL数据库的存储过程
- mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)
- kafka官方文档
- 【编程素质】算法-快速排序
- Qt核心知识归类及相关资料
- cglib 实现动态代理
- mysql5.0开启日志