POJ 3278

来源:互联网 发布:mac pro 无线网卡驱动 编辑:程序博客网 时间:2024/06/05 00:21

这题以前写过,很简单的BFS。就是可能不容易想到。

还是那么一句话,最短路,BFS。

AC比较轻松,算是BFS的练手题吧。

#include <cstdio>#include <iostream>#include <queue>#include <cstring>using namespace std;#define maxn 100005int n,k;queue<int> q;int step[maxn],v[maxn];int bfs(){    q.push(n);    step[n]=0;    v[n]=1;    int h,next;    while (!q.empty()) {        h=q.front();        q.pop();        for(int i=-1;i<2;i++){            if(i==0) next=h*2;            else next=h+i;            if(next>maxn || next<0) continue;            if(!v[next]){                q.push(next);                step[next]=step[h]+1;                v[next]=1;            }            if(next==k) return step[next];        }    }    return 0;}int main(){    while(~scanf("%d%d",&n,&k)){        memset(v, 0, sizeof(v));        if(n>k) printf("%d\n",n-k); //注意这里,如果n小于k就不用了,合理剪枝        else printf("%d\n",bfs());    }    return 0;}
0 0
原创粉丝点击