dfs 练习

来源:互联网 发布:php.exe不是内部命令 编辑:程序博客网 时间:2024/06/05 14:09

代码大意为:一个数要经过几步变为另一个数;

内部题目,具体不能多说,自己无聊写的。

#include <iostream>#include <cstdio>#include <math.h>#include <algorithm>#include <vector>#include <queue>#include <cstring>using namespace std;int n,m;int visti[10005];vector <int> divisor(int n) {    vector <int> res;    for(int i=2; i*i<=n; i++) {        if(n%i==0) {            res.push_back(i);            if(i!=n/i) res.push_back(n/i);        }    }    return res;}vector <int> divi;int ans;int bfs() {    priority_queue<int> que;    que.push(n);    visti[n]=1;    int flag=0;    while(!que.empty()) {        int x=que.top();        que.pop();        ans++;        divi=divisor(x);        for(int i=0; i<(int)divi.size(); i++) {            int newn=x+divi[i];            if(visti[newn]) continue;            if(newn<m) {                que.push(newn);            } else if(newn==m) {                ans++;                flag=1;                break;            }        }        if(flag) break;    }    if(flag==0 && n!=m) ans=-1;    else if(flag==0 && n==m) ans=0;    return ans;}int main() {    int T;    scanf("%d",&T);    while(T--) {        scanf("%d%d",&n,&m);        memset(visti,0,sizeof(visti));        ans=-1;        int a=bfs();        printf("%d\n",a);    }}



原创粉丝点击