POJ 3278 Catch That Cow 【BFS】

    xiaoxiao2021-03-25  14

    题目链接:http://poj.org/problem?id=3278 题意:假设一个人在位置x,那么他下一分钟能到达的位置是x-1,x+1,2*x,现给出你n,k,让你求从n到k最少所花费的时间 解析:直接bfs

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> using namespace std; typedef long long ll; const int maxn = 1e6+100; int n,k; int vis[maxn]; struct node { int x,step; node() {} node(int _x,int _step) { x = _x; step = _step; } }; int bfs() { queue<node> q; memset(vis,0,sizeof(vis)); vis[n] = 1; q.push(node(n,0)); while(!q.empty()) { node now = q.front(); q.pop(); if(now.x==k) return now.step; if(!vis[now.x+1]) { q.push(node(now.x+1,now.step+1)); vis[now.x+1] = 1; } if(now.x>0 && !vis[now.x-1]) { q.push(node(now.x-1,now.step+1)); vis[now.x-1] = 1; } if(now.x*2<maxn && !vis[now.x*2]) { q.push(node(now.x*2,now.step+1)); vis[now.x*2] = 1; } } return -1; } int main() { while(~scanf("%d %d",&n,&k)) printf("%d\n",bfs()); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-300165.html

    最新回复(0)