首页 > 其他分享 >POJ 3278 Catch That Cow(BFS)

POJ 3278 Catch That Cow(BFS)

时间:2022-12-23 20:25:23浏览次数:66  
标签:node int BFS vis step POJ Catch 3278

POJ 3278 Catch That Cow

​ 现在你在一个数轴上的位置 x,位置 k 上有一头牛,你要抓住这头牛,也就是走到位置 k 上。那怎么走呢?你有两种走路的方法,一种是从 x 移动到 \(2 \times x\);一种是从 x 移动到 \(x - 1\)或者\(x + 1\),他们都算是一步。假设牛不会动,请问你最少需要多少步能抓住这头牛。

思路:

​ 很经典的BFS模型嘛,转移也给好了。注意处理一下边界,以免越界。

代码:

#include <iostream>
#include <cstring>
#include <queue>

using namespace std;
const int N = 100010;

int n, k;
int dis[N];
int vis[N];

struct node
{
    int x, step;
    node(int _x, int _step) {
        x = _x, step = _step;
    }
};


void bfs(int x)
{
    memset(vis, 0, sizeof vis);
    queue<node> q;  
    q.push(node(x, 0));
    vis[x] = 1;
    
    while(q.size())
    {
        node t = q.front();
        q.pop();

        if(t.x == k)   
        {
            cout << t.step << '\n';
            return;
        } 

        for(int i = 0; i < 3; i++)
        {
            int xx;
            if(i == 0)  xx = t.x + 1;
            else if(i == 1) xx = t.x - 1;
            else if(i == 2) xx = t.x * 2;

            if(xx >= 0 && xx <= N && !vis[xx])
            {
                q.push(node(xx, t.step + 1));
                vis[xx] = 1;
            }
        }
    }
}

int main()
{
    cin >> n >> k;
    bfs(n);
}

标签:node,int,BFS,vis,step,POJ,Catch,3278
From: https://www.cnblogs.com/DM11/p/17001529.html

相关文章

  • P1379 八数码难题(BFS)
    P1379八数码难题​ 八数码问题就是在\(3\times3\)的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,我们用0来表示。给出一个初始局面,给......
  • BFS,DFS算法
    算法题目  基础:1.数组2.字符串3.排序4.贪心5.递归6.循环7.滑窗8.栈9.进制转换10.位运算11.队列12.哈希表13.链表14.线性表15.二分查找......
  • POJ-1088 滑雪
    POJ-1088滑雪有一个平面区域,上面有一些点,每个点对应一定的权值,每次移动只能从当前位置向上下左右四个方向中,权值小于当前位置权值的点移动,一次性最多可以移动多远(相邻位......
  • POJ-2533 Longest Ordered Subsequence
    POJ-2533LongestOrderedSubsequence题意:给出一个序列,求出这个序列的最长上升子序列序列\(A\)的上升子序列\(B\)定义如下:\(B\)为\(A\)的子序列\(B\)为严......
  • POJ-1458 Common Subsequence
    POJ-1458CommonSubsequence题意:首先对最长子序列有个定义:如果一个字符串a可以由另一个字符串b删去某些元素得到,那么说明a就是b的子序列字符串现在有两个字符串,请问最......
  • [算法][解析几何]覆盖最多点固定半径圆问题 POJ1981 圆的扫描线 详细解法
    引题: 覆盖最多点固定半径圆问题改编自POJ1981CircleandPoint 背景:在二维平面中给定n个点,求半径为r的圆最多可以覆盖多少个点(1<=n<=300,精度eps=0.0001)输入......
  • 构建一个应用程序,用于在基于内存的数据库中存储 POJO(普通旧 Java 对象)
    本指南将引导您完成构建应用程序的过程,该应用程序使用SpringDataJPA在关系数据库中存储和检索数据。您将构建什么您将构建一个应用程序,用于在基于内存的数据库中存储PO......
  • 搜索问题 DFS BFS
    搜索问题DFSBFSDFSdfs更多用于解决存在性问题和遍历性问题他可以很容易找到一个东西是否存在,比如说一条路径是否存在,不需要恢复现场也可以比较方便的展示所有的情况,......
  • POJ 2249 : Remmarguts' Date
    #include<iostream>#include<queue>#include<vector>usingnamespacestd;constintN=100000*2+1;#definempmake_pair#definepiipair<int,int>......
  • 最简单的BFS走迷宫问题
    原题目链接:https://www.luogu.com.cn/problem/T279759?contestId=88579  题目背景人生辗转几十年,今天学长终于遇到了他的喜欢的女孩...题目描述在一个阴雨连绵的夜......