coj1090: Number Transformation bfs
来源:互联网 发布:windows影音制作xp版 编辑:程序博客网 时间:2024/06/07 02:37
这道题用bfs做,一开始没理解清题意WA的不要不要的,后来仔细看题发现A是一步变一次的,也就是说每次可以加的素数的范围是改变的,比如当S=5,T=20的时候,S先加3=8,然后此时可以取的素数就不仅有2、3,还有5、7了,一开始不仔细看题真是醉了。
Description
In this problem, you are given a pair of integers A and B. You can transform any integer number A to B by adding x to A.This x is an integer number which is a prime below A.Now,your task is to find the minimum number of transformation required to transform S to another integer number T.
Input
Input contains multiple test cases.Each test case contains a pair of integers S and T(0< S < T <= 1000) , one pair of integers per line.
Output
For each pair of input integers S and T you should output the minimum number of transformation needed as Sample output in one line. If it's impossible ,then print 'No path!' without the quotes.
Sample Input
5 73 4
Sample Output
Need 1 step(s)No path!
bfs注意不要重复放一个数,不然队列就爆了,然后可以将素数先打表,我这里还将每个数的前一个最大素数打表了,用的时候有种链表的快感
下面是AC代码
#include<iostream>#include<cstdio>#include<queue>#include<cstring>using namespace std;int preprime[1005], prime[1005] = { 0 };void bfs(int S,int T,int step[], int vis[]){int temp1, ts;queue<int>p;step[S] = 1;p.push(S);while (!p.empty()){temp1 = p.front();ts=temp1;p.pop();while (preprime[ts] != 0){if (temp1 + preprime[ts]<T){if (vis[temp1 + preprime[ts]] == 0){p.push(temp1 + preprime[ts]); step[temp1 + preprime[ts]] = step[temp1] + 1;vis[temp1 + preprime[ts]]=1;}}else if (temp1 + preprime[ts] == T){cout << "Need " << step[temp1] << " step(s)" << endl;return;}ts = preprime[ts];}}cout << "No path!" << endl;}int main(){int S, T;int step[1005] = {0};int vis[1005] = {0};int temp = 0;for (int i = 2; i<502; i++)for (int j = 2 * i; j<1002; j += i)prime[j] = 1;for (int i = 2; i<1002; i++){preprime[i] = temp;if (prime[i] == 0)temp = i;}while (scanf("%d%d",&S,&T)==2){if(S==1||S==2)cout << "No path!" << endl;else{for(int i=0;i<T;i++){vis[i]=0;step[i]=0;} bfs(S,T,step, vis);}}return 0;}
- coj1090: Number Transformation bfs
- CSU1090-Number Transformation-BFS
- LightOJ 1141 Number Transformation bfs
- Number Transformation-bfs+素数筛选法
- Number Transformation (bfs) (素数筛选)
- Codeforces Round #153 (Div. 1) C Number Transformation bfs
- Light OJ:1141 Number Transformation(BFS+素因子)
- 【llightoj】1141-Number Transformation BFS+查找质因子
- Number Transformation
- Number Transformation
- Number Transformation
- HDU - 4952 Number Transformation
- HDU4952-Number Transformation
- HDU 4952 Number Transformation
- HDOJ 4952 Number Transformation
- hdu 4952 Number Transformation
- hdu 4952 Number Transformation
- hdu 4952Number Transformation
- Docker在不同平台上的安装
- 蓝桥杯 最大子阵 dp (类最大连续子段和)
- 并发编程的艺术-数据库连接池简单实现
- 大数据下Hadoop及Hbase使用中遇到的若干问题及汇总
- 10年面试2000人,张一鸣总结优秀年轻人的5大特质
- coj1090: Number Transformation bfs
- pymysql 数据库字符报错以及外网连接权限问题
- java中的工厂模式
- 校园网 win7设置代理服务器
- 关于继承BaseServlet后为什么form表单中必须加上method=“post”
- 博客Test
- 网络编程(IOCP)
- 响应式网页设计指南
- java 类的创建与对象的关系