poj 3278 Catch That Cow(简单的广搜+剪枝)

POJ 3278 Catch That Cow(BFS 剪枝) 题目链接:http://poj.org/problem?id=3278 这几次都是每天的第一道题都挺顺利,然后第二道题一卡一天。 = =,今天的这道题7点40就出来了,不知道第二道题在下午7点能不能出来。0 0 先说说这道题目,大意是有个农夫要抓牛,已知牛的坐标,和农夫位置。而且农夫有三种移动方式,X + 1,X - 1,X * 2,问最少几步抓到牛。 开始认为很简单的,三方向的BFS就能顺 阅读详情

题目概括:
在一条直线有两个点n,m(0 <= n,m <= 100000);对n有三种操作+1,-1,*2,最少操作多少次让其等于m。
这是一道广搜题目
思路:
用结构体保存节点信息和步数,然后再用另一个数组保存访问信息,头结点入队
当队列不为空开始循环,节点出队,遍历和该节点有关的所有节点,并判断其是否访问,
如果访问过则不入队,否则入队,该步数等于上一步的步数+1


当队列不为空开始循环,节点出队,遍历和该节点有关的所有节点,并判断其是否访问,如果访问过则不入队

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

struct sept
{
    int x;
    int count;
}s[1000005];
int visit[1000005] = {0};
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m) != EOF)
    {
        memset(visit,0,sizeof(visit));
        sept a;
        a.x = n;
        a.count = 0;
        queue<sept> q;
        q.push(a);sept t;
        while(!q.empty())
        {
            t = q.front();
            q.pop();
            if(t.x == m)
            {
                break;
            }
            if(t.x > 0 && !visit[t.x-1])
            {
                sept z;z.x = t.x-1; z.count = t.count+1;
                q.push(z);
            }
            if(t.x < m &&!visit[t.x+1])
            {
                sept z;z.x = t.x+1; z.count = t.count+1;
                q.push(z);
            }
            if(t.x < m && !visit[t.x*2])
            {
                sept z;z.x = t.x*2; z.count = t.count+1;
                q.push(z);
            }
        }
        printf("%d\n",t.count);
    }
    return 0;
}
以上是一个失败的代码

1.结构体存储耗内存太大,大量结构体之间的赋值对时间消耗也不小。

2.剪枝不够好,当n = 0,m = 100000时,在

 if(t.x < m && !visit[t.x*2])判断的时候n = 50050就已经超超数组了,并且还没找到结果

总之各种不好啊

下面是改进的代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

int visit[100005] = {0};
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m) != EOF)
    {
        memset(visit,0,sizeof(visit));
        queue<int> q;
        q.push(n);int t;
        while(!q.empty())
        {
            t = q.front();
            q.pop();
            if(t == m)
            {
                break;
            }
            if(t > 0 && !visit[t-1])
            {
                int z;z = t-1; visit[z] = visit[t]+1;
                q.push(z);
            }
            if(t < m &&!visit[t+1])
            {
                  int z;z = t+1; visit[z] = visit[t]+1;
                q.push(z);
            }
            if(t*2 < 100005 && !visit[t*2])
            {
                int z;z = t*2; visit[z] = visit[t]+1;
                q.push(z);
            }
        }
        printf("%d\n",visit[m]);
    }
    return 0;
}

剪枝情况

1.当 n > m时只对其用 -1操作

2.当2 * n <= 最大值时 对其用*2操作

3.当n + 1 > m时不用加

改进情况

1.去掉了结构体,只用其值入队。

2.标记时用数组不仅仅标记访问,还有到达该数时的步数。

广搜最重要的还是剪枝和标记啊

POJ2488——A Knight‘s Journey(迷宫)、POJ3278——Catch That Cow(DFS) 这代表一个 p * q 棋盘,其中 p 描述存在多少个不同的方格数 1, . . . , p, q 描述存在多少个不同的方格字母。由于移动操作的不确定性,直接计算比较困难,因此考虑使用广度优先搜索(BFS)算法,从起始位置开始,逐层扩展可能的位置,直到找到目标位置,此时的层数即为最少移动次数。我们的骑士生活在一个棋盘上,它的面积比普通的 8 * 8 棋盘小,但它仍然是矩形的。在搜索过程中,需要记录已访问的方格,避免重复访问,同时按照一定顺序尝试骑士的移动方向,以保证找到字典序最小的路径。 阅读详情

相关推荐

poj3278 Catch That Cow 水BFS+简单剪枝

传送门:poj3278 Catch That Cow题目大意一个农夫想要抓到出走的牛,农夫站在n位置,这头牛在k位置(同一个水平线上),农夫从该位置有两种方式出发: 1. 每次到达该位置前一个位置(i-1)或者下一个位置(i+1) 2. 没次到达该位置的两倍的位置(i*2)解题思路水BFS,看下面代码的剪枝,如果不进行相应剪枝的话会RCAC代码#include<cstdio> #include<

woshinannan的专栏 554

POJ 3278

POJ3278 Catch That Cow 原题传送门 大致题意: 给定两个整数n和k(n&amp;lt;=100000) 通过 n+1或n-1 或n*2 这3种操作,使得n==k 最终输出最少的操作次数 思路 很明显这是一道搜索题 考虑到n不大 可以直接暴力搜索 bfs使用STL队列直接搜索即可 然后注意一下判重 唯一一个需要注意的地方就是 如果n&amp;gt;k的 那么只能...

LonerBoat的博客 2196

5分钟看懂LTE注网全流程:从PLMN选择到小区驻留的log分析技巧

本文深入解析了LTE终端从开机到成功驻留小区的完整流程,重点分享了基于QXDM和QCAT工具的log分析实战技巧。文章详细拆解了PLMN选择、System/Band扫频、小区搜索与同步、系统消息解析及驻留等关键步骤,并提供了高频问题场景的排查思路,帮助网络优化工程师快速定位终端侧、射频环境或网络配置问题。

app77的博客 432

poj3278追逐母牛

poj3278 题目描述:农夫约翰已被告知一头逃亡母牛的位置,并希望立即抓住她。他从数轴上的点N(0 ≤N≤ 100,000) 开始,而奶牛在同一数轴上的点K(0 ≤K≤ 100,000) 处。Farmer John 有两种交通方式:步行和传送。 1.行走:FJ 可以在一分钟内从X点移动到X- 1 或X+ 1点 2.传送:FJ 可以在一分钟内从X点移动到 2 ×X点。 假设母牛是不会动的,农夫约翰需要多长时间才能取回它? 输入:两个空格分隔的整数:N和K 输出:农夫约翰...

zjsru_Beginner的博客 1669

9、傅里叶变换:连续时间与离散时间信号分析的核心工具

本文深入探讨了傅里叶变换在连续时间和离散时间信号分析中的核心作用,详细介绍了连续时间傅里叶变换(CTFT)和离散时间傅里叶变换(DTFT)的定义、性质及其应用。文章涵盖了傅里叶级数到傅里叶变换的推导过程、常见变换对、系统分析中的关键性质,并讨论了采样后频谱的周期延拓与混叠问题。此外,还展示了傅里叶变换在滤波器设计、通信系统调制解调等实际场景中的应用,最后展望了其在图像处理、生物医学等领域的广阔前景。

jump7的博客 68

阿波罗开发板硬件架构与STM32模块化设计详解

嵌入式开发板的模块化设计是提升硬件复用性、降低迭代成本的关键技术路径。其核心在于底板与核心板的电气解耦与功能分层,依托STM32系列MCU(如F429/F767)的丰富外设资源与引脚复用能力,实现信号完整性、电源域隔离与热管理的系统级协同。该架构显著支撑工业HMI、智能家居网关、便携医疗设备等典型场景,尤其在RGB LCD驱动、QSPI Flash内存映射、多协议通信(CAN/RS485/USB)及低功耗唤醒(WK_UP按键)等工程实践中展现出高可靠性与易调试性。本文围绕阿波罗开发板展开深度解析,覆盖最小系

weixin_42510201的博客 64

poj 3278

poj 3278 catch that cow 思路:维护一个队列,每个位置都有三种走法,然后将这三个状态放入队列中,再pop掉上一个位置。 不知道为啥,代码poj上过不了,感觉没什么问题,思路也很清晰 #include <iostream> #include<cstring> #include<queue> using namespace std; int n,k; bool vis[10005]; struct node { int x; int st

weixin_51934288的博客 559

【代码审计】专栏文章汇总

代码审计基础 代码审计基础 源代码审计思路(上) 源代码审计思路(下) 常见漏洞审计 认证会话管理(上) 认证会话管理(下) 输入输出验证 授权管理审计 业务安全审计 第三方组件审计

武天旭的博客 4845

POJ3278---Catch That Cow

POJ3278—Catch That Cow 题目描述 农夫约翰已被告知逃亡牛的位置,并希望立即抓住她。他开始于一个点N(0≤ N≤100,000)和牛是在点K (0≤ K≤100,000),他们在同一条线上。农夫约翰有两种交通方式:步行和乘车。 行走:约翰可以在一分钟内从任意点X移动到X -1或X + 1 点 乘车:约翰可以在一分钟内从任意点X移动到点2× X . 如果母牛不知道它的追赶,根本不动,那么农夫约翰需要多长时间才能找回它? 输入 第1行:两个以空格分隔的整数:N和K 输出 第1行:农夫约翰用最

LXYDSF的博客 1613

零基础入门simulink建模仿真--基于Simulink的QPSK调制与解调仿真建模示例

QPSK是一种相位调制技术,将两个比特映射到一个符号上,每个符号对应四个可能的相位之一(0°、90°、180°、270°)。通过Simulink,我们可以通过模块化的建模方式实现QPSK的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的QPSK调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解QPSK调制与解调的基本原理及其应用。所需工具和环境:列出进行QPSK仿真所需的工具和环境。步骤详解。

amy_mhd的博客 1309

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1482

【简单搜索】 POJ 3278 Catch That Cow 详解

Catch That Cow: Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a pointN(0 ≤N≤ 100,000) on a number line and the cow is at a pointK(0 ≤K≤ 100,000) on the same number line. Farmer Jo...

Qiuker_jl的博客 771

浅谈innovus Update io latency相关作用

同样我们使用update io latency,工具取launch clock latency负值反标到clock端口上,同时认为capture clock latency与launch clock latency相等,这样可以相互抵消,这样setup time slack = T – Tsetup -Tcomb – Toutput_delay,因此采用update io latency后,reg2out timing path的setup check变得真实些。图3 in2reg示意图。

芯冰乐 475

POJ 3278 Catch That Cow

poj 3278 题目链接:http://poj.org/problem?id=3278 Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,00

u010084308的专栏 919

【信息科学与工程学】【物理/化学科学和工程技术】第八篇 光学07

对于光源-探测器距离 ρ, 稳态漫反射率 R(ρ) ≈ (1/(4π)) [ z₀ (μ_eff + 1/r₁) exp(-μ_eff r₁)/r₁² + (z₀ + 2z_b) (μ_eff + 1/r₂) exp(-μ_eff r₂)/r₂² ], 其中 μ_eff = √(3μ_a(μ_a+μ_s’)), z₀=1/μ_s’, z_b 与边界条件有关。通过测量光纤各点的布里渊频移 ν_B(z) 来得到应变/温度分布:Δν_B(z) = C_ν,ε Δε(z) + C_ν,T ΔT(z)。

weixin_49199313的博客 330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 3278 Catch That Cow

Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 51447   Accepted: 16134 Description Farmer John has been informed of the location of a fugitiv

ACway的专栏 2777

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ3278/洛谷P1588 catch that cow 题解

POJ3278/洛谷P1588 catch that cow 题解1. 对搜索的介绍1.1 剪枝2. 广度优先搜索的思路2.1 队列2.2 BFS 的实现方法2.3 剪枝的方法2.3.1 Hash2.3.2 Hash 剪枝思路3. 对此题的分析3.1 此题的剪枝4. 代码5. 总结 1. 对搜索的介绍 搜索是算法竞赛,公司面试中都必不可少的一个技能。刚开始学习的搜索那一定是最经典的BFS(广度优先搜索)和DFS(深度优先搜索)。 BFS就相当于彻底的暴力法,走遍所有的路径,那必能遇到我想要的结果,或者证明

weixin_46243859的博客 742

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

poj3278Catch That Cow

http://poj.org/problem?id=3278 操,没剪枝,RE无数次。。 #include #include #define Max 100001 int visited[Max],queue[Max],n,k; int Breadth_FirstSearch(int p) { int front=0,rear=0,head,i,temp; if(p==k)

ViolentLittleAngel的博客 405

BFS(广度优先搜索)-POJ3278-Catch That Cow(抓住那头牛)

BFS(广度优先搜索)-POJ3278-Catch That Cow(抓住那头牛) 题目链接:Catch That Cow BFS: 广度优先搜索(Breadth First Search, BFS)是对树的逐层遍历,通过距终点状态由远到近对所有可能的状态进行搜索并剪枝,一般用于求解达到某目标的最小步骤数。 思路:         有两点需要说明:          ...

[SZU_Crayon] 1211

POJ 3278 Catch That Cow(追赶母牛)

题目链接:POJ 3278 题意: 给出两个数字n,k。每次在一个位置p可选择先前走1步到达p+1,或者先前走p步到达2*p,或向后走一步到达p-1。问最少需要多少次移动可以从0出发到达k? 例如n=5,k=17时,最短的移动路径是:0-->5-->10-->9-->18-->17,记为4次。 思路: 用BFS搜索。每次从队列首取出一个所到达的位置,判断该位置是不是目标位置,如果不是的话

ramay7 514

【回炉重造】POJ-3278.Catch That Cow 题解

【回炉重造】POJ-3278.Catch That Cow 题解 我好弱,重点记录一个没想到的剪枝 题目链接:POJ-3278.Catch That Cow 题目 题意 有一个一维的坐标轴,你在一个位置 X,牛在另一个位置 T。 你可以这样移动: 左移一步 X-1 右移一步 X+1 传送一下 X*2 问你最少要几步能找到牛 解题思路 广搜: 试试+1能不能走,能走就加入队列,并记录走到这一步所需要的时间 试试-1能不能走,能走就加入队列,并记录走到这一步所需要的时间 试试<<1(*2)能

qq_37504214的博客 578

【广搜】—poj3278 catch that cow

题目大意 n*n矩阵1—n*n,人在n处,cow在k处 人可 -1, +1, *2,三种操作,step+1; cow不动 求到达k的最短路径 ——> 队列操作,广度优先搜索 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #includ...

ChangeW fafa的博客 148

poj 3278 Catch That Cow (BFS+剪枝)

Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 58474   Accepted: 18173 Description Farmer John has been informed of the location of a fugit

ysCover 679

POJ 3278.Catch That Cow(bfs)(c++)

POJ 3278.Catch That Cow(bfs)(c++) 题目链接:Catch That Cow 题目大意: 给定两个整数n和k。通过 n+1或n-1 或n*2 这3种操作,使得n==k。输出最少的操作次数。 样例: 输入:5 17 输出:4 解释:5-10-9-18-17 解题思路: 可以看成搜索问题,或者bfs典型的迷宫问题,定义一个队列。把起点入队,然后队首出队作为当前位置,把当前位置所能一步到达的位置入队,依次下去,直到,出队的那个当前位置是终点,返回步数。 代码如下: #include

谦卑 378

POJ 3278 Catch That Cow(BFS)

题目链接:https://cn.vjudge.net/problem/POJ-3278 题意:给你 n 和 k ,可以对 n 进行 n+1、n-1和n*2的操作,问至少经过几次操作数字 n 能够到达 k 。 思路:从n开始BFS,每次将三种操作加入队列搜索,最先搜索到的肯定是操作最少的,由此对已经搜索过的点进行标记剪枝。 AC代码: 1 #include<cs...

weixin_30933531的博客 97
上一篇: poj 2109 Power of Cryptography(pow() 和 double 的妙用)
下一篇: 位运算
leonharetd
博客等级 码龄15年 13粉丝 111原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值