poj3126 Prime Path 容器+素数筛法 (o^2)
来源:互联网 发布:该怎样正确使用网络 编辑:程序博客网 时间:2024/05/25 19:56
#include<iostream>#include<algorithm>#include<queue>using namespace std;const int N=10000;const int INF=10000;bool isprime[N];void initprime(){fill(isprime,isprime+N,true);//for(int i=0;i<N;i++)//isprime[i]=true;for(int i=2;i<N;i++) //将所有的素数标记为真if(isprime[i])for(int j=i*i;j<N;j+=i)isprime[j]=false;}int d[N];// 存到达某点的步数 还有标记的作用int BFS(int begin,int end) //宽搜一下子{int i,j;queue<int> q;for(i=1000;i<N;i++)d[i]=INF; //初始化为无穷大q.push(begin);//将起点放入容器d[begin]=0; //并且该点为0while(q.size())//容器大小为真时 继续{ int p=q.front();//取出第一个元素赋给p q.pop(); //并且删除该点 if(p==end) //控制结束条件 找到该点直接结束break;for(i=1;i<=1000;i*=10)//i共可进行3次循环{int m=(p/i)%10; //1234 取每个位数上的数for(j=0;j<=9;j++)// 1234 在 123(0到9)之间遍历一遍 且不会遍历取出来的m 由此实现 了题目的要求{if(j==m)continue;if(j==0&&i==1000)continue;int n=p+(j-m)*i;//得到某一个数if(isprime[n]&&d[n]==INF)//d[]数组可以实现标记 还有步数的叠加{q.push(n); //将1000到9999里里面的所有素数都求出来d[n]=d[p]+1; //到达该素数所用的步数}}}}return d[end];}int main(){int t,begin,end;initprime();//实现标记素数cin>>t;while(t--){cin>>begin>>end;int res=BFS(begin,end);if(res==INF)cout<<"impossible!"<<endl;elsecout<<res<<endl;}return 0;}
阅读全文
0 0
- poj3126 Prime Path 容器+素数筛法 (o^2)
- POJ3126 Prime Path 素数
- poj3126 Prime Path(素数路径)
- POJ3126 Prime Path(素数判断+bfs)
- poj3126 Prime Path(bfs+40入口+素数判定)
- POJ3126 Prime Path —— BFS + 素数表
- poj3126 - Prime Path
- hdu1973 || poj3126 Prime Path
- POJ3126 Prime Path
- POJ3126--Prime Path
- POJ3126 Prime Path
- [POJ3126]Prime Path+BFS
- Prime Path(poj3126)
- poj3126 Prime Path
- POJ3126--- Prime Path
- POJ3126 Prime Path(bfs)
- POJ3126 Prime Path(BFS)
- POJ3126 - Prime Path
- jQuery事件对象的属性和方法
- python中time类型,datetime类型的关系与互相转换
- Django---form
- POJ3579 二分判定+二分查找
- 《慕课网玩转算法面试》笔记及习题解答7.1~7.3
- poj3126 Prime Path 容器+素数筛法 (o^2)
- 动态库DLL加载方式-静态加载和动态加载
- java中int转成String位数不足前面补零
- bzoj2245 [SDOI2011]工作安排
- iOS之UIMenuController的简单使用
- JAVA通过JDBC链接数据库获取数据(一)
- jdk并发工具包之锁
- ps2解码
- HTML,CSS实训笔记