CSU1090-Number Transformation-BFS

来源:互联网 发布:二六三网络通信 编辑:程序博客网 时间:2024/06/06 01:25

K: Number Transformation

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(就是喜欢简单粗暴)

#include <bits/stdc++.h>#define N 10100#define INF 0x3f3f3f3f#define LL long long#define mem(a,n) memset(a,n,sizeof(a))#define fread freopen("in.txt","r",stdin)#define fwrite freopen("out.txt","w",stdout)using namespace std;const int prime[241]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997}; bool vis[1010];int main(){//  ios::sync_with_stdio(false);    queue<pair<int,int> > q;    int n,m,ans;    while(cin>>n>>m){        ans=0;        mem(vis,0);        while(!q.empty()){            q.pop();        }        q.push(make_pair(n,0));        while(!q.empty()){            int temp=q.front().first,tempcnt=q.front().second;            q.pop();            if(temp==m){                ans=tempcnt;                break;            }for(int i=0;i<241;++i){                if(prime[i]>=temp){                    break;                }                if(temp+prime[i]<=m&&!vis[temp+prime[i]]){                    q.push(make_pair(temp+prime[i],tempcnt+1));                    vis[temp+prime[i]]=true;                }            }        }        if(ans){            printf("Need %d step(s)\n",ans);        }else{            cout<<"No path!"<<endl;        }    }    return 0;}/**********************************************************************    Problem: 1090    User: CSUzick    Language: C++    Result: AC    Time:68 ms    Memory:1700 kb**********************************************************************/