POJ 3126 Prime Path
来源:互联网 发布:淘宝默认宝贝详情页 编辑:程序博客网 时间:2024/05/09 01:49
BFS。
一个质数至少要变多少次才能到另外一个质数。
中间变得数也必须是质数。每次变换一个位置。
Sample Input
31033 81791373 80171033 1033
Sample Output
670
记得判断找出来的数是否是质数,最好打印1000——10000的质数表(很多办法)。
然后记得标记数是否被搜索到。
#include<stdio.h>#include<string.h>#include<math.h>int a,b,ans,top,end;short q[10001];short flag[10001];short prime[10001];int isprime(){ int i,j,k; for(i=1001;i<10000;i+=2) { k=sqrt(i*1.0); for(j=2;j<=k;j++) if(i%j==0) break; if(j>=k+1) flag[i]=1; }}int bfs(){ int i,j; q[end]=a; while(1) { short ok=0; for(i=end;i<=top;i++) { if(q[i]==b)return 1; prime[q[i]]=1; } for(i--;end<=i;end++) { int t; for(j=1;j<=9;j++) { t=q[end]%1000+j*1000; if(flag[t]&&!prime[t]) q[++top]=t,ok=1; } for(j=0;j<=9;j++) { t=q[end]/1000*1000+q[end]%100+j*100; if(flag[t]&&!prime[t]) q[++top]=t,ok=1; } for(j=0;j<=9;j++) { t=q[end]/100*100+q[end]%10+j*10; if(flag[t]&&!prime[t]) q[++top]=t,ok=1; } for(j=0;j<=9;j++) { t=q[end]/10*10+j; if(flag[t]&&!prime[t]) q[++top]=t,ok=1; } } if(!ok)return 0; ans++; }}int main(){ int n; memset(flag,0,sizeof(flag)); isprime(); while(~scanf("%d",&n)) { while(n-->0) { memset(prime,0,sizeof(prime)); scanf("%d%d",&a,&b); ans=end=0,top=1; if(bfs()) printf("%d\n",ans); else printf("Impossible\n"); } }}
- POJ 3126 Prime Path
- POJ 3126 Prime Path
- poj 3126Prime Path
- POJ -3126-Prime Path
- POJ 3126 Prime Path
- poj 3126 Prime Path
- POJ 3126 - Prime Path
- POJ 3126 Prime Path
- poj 3126 prime path
- POJ 3126 Prime Path
- Prime Path poj 3126
- POJ 3126 Prime Path
- poj 3126 Prime Path
- POJ 3126 Prime Path
- poj 3126 Prime path
- poj - 3126 - Prime Path
- POJ 3126 Prime Path
- POJ 3126 Prime Path
- 磁盘驱动与虚拟磁盘Miniport驱动一
- JVM性能调优实践
- 关于模版类 写构造函数之后无法编译的问题
- 深度探索C++对象模型读书笔记-第六章执行期语意学
- sqlserver 中的转换函数
- POJ 3126 Prime Path
- c++ virtual解释
- setInterval定时执行ajax
- STL之非修改性序列算法3
- 【Learning】跟着kuangbin巨巨学 概率dp
- java 常量池
- kmp算法(上)
- Winform遍历枚举的值并加载到下拉框中
- sss