HDU1010

HDU1010(DFS+奇偶剪枝) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,t,a,b,c,d; char map[10][10]; bool vis[10][10]; int dir[10][10] = {{0,1},{0,-1},{-1,0},{1,0}}; bool flag; void dfs(int x,int y,i. 阅读详情

题目一直说的是时间,因为一秒一步,实际上就是在找到出口时是否走了恰好走了T步,注意此时走的路径不一定是最短路径,有可能饶了几步才刚好T步到达终点

简单的DFS,标准的迷宫求解型的题目,输入时用变量记录下开始的坐标,终点的坐标。

对于开始站的位置在刚开始就要记录一下,因为在深搜过程中开始站的地方已经不能走了。

利用一个flag在递归过程中进行简单的剪枝,因为在找到正确答案后就不需要再增加递归深度了。

注意标记与回溯,边界判断,以及边界和标记的判断顺序,防止数组越界访问

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char a[10][10];
int vis[10][10];
int sizev = sizeof(vis);
int flag;
int s_i, s_j, d_i, d_j;
int M, N, T;
void f(int i, int j, int dep)
{
    if (i == d_i && j == d_j) {          ///递归出口
        if (T == dep) {            
            flag = 1;                ///当找到door的坐标,并且dep和要求的时间相等时,找到出口,标记flag以后不再增加递归深度
        }
        return ;
    }
    ///对于当前位置的上下左右进行DFS
    ///注意&&的先后顺序和短路效应
    ///写成!flag && !vis[i - 1][j] && i - 1 >= 0会因为vis在i - 1 < 0时越界访问而出错,i + 1, j - 1, j + 1同样注意越界问题
    if (!flag && i - 1 >= 0 && !vis[i - 1][j]) {     
        vis[i - 1][j] = 1;         ///标记表示已经走过
        f(i - 1, j, dep + 1);
        vis[i - 1][j] = 0;       ///回溯,删除标记,为其他可能路径留出空间
    }
    if (!flag && j + 1 < M && !vis[i][j + 1]) {
        vis[i][j + 1] = 1;
        f(i, j + 1, dep + 1);
        vis[i][j + 1] = 0;
    }
    if (!flag && i + 1 < N && !vis[i + 1][j]) {
        vis[i + 1][j] = 1;
        f(i + 1, j, dep + 1);
        vis[i + 1][j] = 0;
    }
    if (!flag && j - 1 >= 0 && !vis[i][j - 1]) {
        vis[i][j - 1] = 1;
        f(i, j - 1, dep + 1);
        vis[i][j - 1] = 0;
    }
}

int main()
{
#if 0
    freopen("data.in", "r", stdin);
    freopen("data.out", "w", stdout);
#endif // 1
    int i, j;
    while (~scanf("%d%d%d", &N, &M, &T)) {
        getchar();  ///留意缓冲
        if (N == 0 && M == 0 && T == 0) break;
        memset(vis, 0, sizev);    ///初始化标记路径数组
        for (i = 0; i < N; i++) {
            for (j = 0; j < M; j++) {
                scanf("%c", &a[i][j]);
                if (a[i][j] == 'S') {
                    s_i = i;
                    s_j = j;
                    vis[i][j] = 1;    ///对于起点,开始的时候就要赋值1
                }
                if (a[i][j] == 'X') vis[i][j] = 1;  ///墙不能走
                if (a[i][j] == 'D') {
                    d_i = i;
                    d_j = j;          ///记录出口位置
                }
            }
            getchar();   ///留意缓冲
        }
        flag = 0;     ///初始化flag
        f(s_i, s_j, 0);    ///从起点开始,起点走的步数为0
        if (flag)
            printf("YES");
        else
            printf("NO");
        puts("");
    }
    return 0;
}



HDU1010迷宫问题 Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 55970    Accepted Submission(s): 15112 Problem Description The 阅读详情

相关推荐

PCB线路板的制作工艺流程分享!2021-08-21

Pcb板制作工艺流程:开料-钻孔-沉铜-压膜-曝光-显影-电铜-电锡-退膜-蚀刻-退锡-光学检测-印阻焊油-阻焊曝光、显影-字符-表面处理-成型-电测-终检-抽测-包装。具体如下:1、开料(CUT) 将原始的覆铜板切割成可以用在生产线上制作的板子过程2、钻孔 使PCB板层间产生通孔,以达到连通层间的目的。 3、沉铜 经过钻孔后的线路板在沉铜缸内会发生氧化还原反应,形成铜层对孔进行孔金属化,使原来绝缘的基材表面沉积上铜,达到层间电性相通。 4、压膜 压膜后的PCB板上面压了一层蓝色的干膜, 干膜是一个载体

jdbpcb88的博客 3245

hdu1010(dfs + 奇偶性剪枝)

奇偶性剪枝是一种可行性剪枝,使得搜索的速度大幅度加快。 (注意:这道题目没有来回走的情况,考虑来回走的情况能不能用搜索写) 假设两个点的曼哈顿距离(abs(x1 - x2) + abs(y1 - y2))为dis。 我们可以找到一个规律:不管我们怎么走,从这个点走到另外一个点的步数为X,那么一定有X - dis = 偶数。 所以如果X - dis为奇数的话,就说明就算不管继续往下怎么走,都不可能走到。 假设我们现在还能走T步的话,只需要判断T - dis是否是偶数就可以,如果是奇数,就肯定走不到,可以直接r

weixin_45925735的博客 429

Kafka延迟队列实现方案全解析

$ \text{时间轮} = \text{环形数组} + \text{分层设计} $$需要补充代码实例或特定场景的优化方案可进一步细化,此大纲已覆盖核心技术路径。

lz989796的博客 816

HDU 1010 DFS+奇偶剪枝

Tempter of the Bone 做DFS(或其他搜索题),我感觉最有趣的地方不是DFS本身而是——“剪枝”。剪枝,顾名思义就是剪去不必要的枝节,也就是避免不必要的搜索过程。有点类似于工程领域的“去噪”,当然这是个人感觉而已。。 HDU 1010这道题是一个典型的迷宫搜索题。给你出口入口,但是你并不是能找到出口就完事了。注意事项: 必须在给定的时间 t 的时候找到。不能...

weixin_30838921的博客 185

《通信工程施工与管理》

制作馈线接头必须使用专用的工具,专用工具包括:馈线切割刀、馈线安全刀、小金属丝毛刷、固定尺寸或大号活动扳手、小号扁锉刀、细齿小手锯、接头扩孔器、3M防水胶或防水接头盒;如图所示,详情如表所示。

2302_78710464的博客 1653

当图像配准遇见边缘计算:低功耗设备的优化实践

本文探讨了在边缘计算环境下优化图像配准技术的实践方法,重点解决低功耗设备如树莓派和Jetson Nano上的算力瓶颈问题。通过算法轻量化、硬件加速和内存优化等策略,实现了毫秒级图像配准,适用于智能安防、移动医疗等实时性要求高的场景。

weixin_29054195的博客 386

hdu-1010 Tempter of the Bone(dfs + 优化)

【代码】hdu-1010 Tempter of the Bone(dfs + 优化)

MuQYun的博客 797

告别转换超时!手把手教你用Allegro2Altium.bat搞定AD21导入Allegro 17.2文件

本文详细介绍了如何使用Allegro2Altium.bat工具解决AD21导入Allegro 17.2文件时的转换超时问题。通过理解转换机制、准备离线环境、执行完整转换流程及高级技巧,帮助工程师高效完成PCB设计文件转换,提升工作效率。

weixin_30378623的博客 419

HDU.1010 Tempter of the Bone

文章目录一、题目解读1、原题2、分类3、题意4、输入输出格式5、数据范围二、题解参考1、总体思路2、思路①(1).分析(2).AC代码三、评价与后话1、评价2、奇偶剪枝0-1示图绘制代码(C++——EasyX)3、后话 一、题目解读 1、原题 HDU.1010 Tempter of the Bone 2、分类 回溯法 3、题意 给定一个N×MN \times MN×M的迷宫让一只狗去走,迷宫中有一...

God-Excious的博客 808

Zabbix 简介、优缺点、基础原理

(8条消息) Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型 --------------------------------------------------------------------------------------------------------------------------- 一、Zabbix 简介 Zabbix是由A...

weixin_50196615的博客 2035

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 339

hdu1010

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 先说下这个题的坑:       1)要求是正好的时间到达,因为这个坑了很多次WA。。       2)减枝。一个是算最短路径都大于给定时间的,一个是奇偶性的问题,比如(0,0)点到了(1,1)要走偶数步,而到(0,1)要走奇数步,判断一下题目给的时间是否符合,还有一个是dfs写的时

奋斗的Die Young 618

【Bug已解决】openclaw command not found / openclaw not installed — OpenClaw CLI 安装失败解决方案

安装 OpenClaw 后命令未找到或运行失败,本质是 PATH 未配置或 Python 版本不兼容。文中给出修复 PATH、使用虚拟环境、检查 Python 版本、pipx 安装等完整方案。

一键难忘的博客 8064

hdu1010(dfs剪枝)

培训acm时刷的题,最近复习下。 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1010` 基础的dfs加剪枝,但是因为没有处理换行符,wa了好多次,我恨。 具体如下图,当用二重循环一个个输入char型一定要注意换行符,为啥我这里说了“当用二重循环一个个输入char型”这个限定条件,详情可见我往期博客https://blog.youkuaiyun.com/weix...

weixin_44735312的博客 344

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hdu_1010 Tempter of the Bone

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 分析:题意即为再规定的时间内从开始点走在结束点。

徵羽調_xiao賤的专栏 882

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HDU1010奇偶剪枝

HDU1010奇偶剪枝 Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 165492 Accepted Submission(s): 43863 Problem Description The...

qq_43813140的博客 401

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu1010题解

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1010 先枚举总步数,即开门周期的倍数,T,2*T,3*T,....iT 如下代码: for(int i = T;i然后进入dfs后各种剪枝: if(ok)return; if(u == en && num == iT){ok = 1;return;}///到达 if(num > iT)retur

leader880022的专栏 595

HDU 1010 Tempter of the Bone

题目:HDU 1010 Tempter of the Bone 题目大意:给定N, M, T, 问是否可以从S开始刚好走T步到达D(门). 题解: 很显然DFS搜索一条满足条件的路,不过要注意的是搜索过程中的剪枝,不然就TLE 这题涉及到的剪枝为奇偶剪枝 #include #include #include #include #include #include #include #inc

WinForBest 440

hdu1010 Tempter of the Bone

hdu 1010 这是一道剪枝的好题;开始时是朴素的当时间t > T || (t >= T&&g[][] != 'D')时,就return;但是还是TLE;之后看了题解说还要加一个奇偶剪枝,就是对每个坐标;将该点坐标的横坐标和纵坐标加起来奇偶性,这样就是斜对角的划分了;很容易知道之后如果S和D的奇偶性不同,还和t的奇偶性对不上就直接output了;但是有个疑问就是问什么一个看似 作用不大的"

hxer 431

hdu1010(深搜 剪枝 回溯)

这个题目我做的时候不是超时就是错误,自己是新手也一直不知道再怎么剪下去 就参考了网上一大牛blog代码如下 #include #include #include //hdu1010 深搜优化剪枝 int m,n,t; char map[8][8]; int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int ex,ey,sx,sy,ok; void dfs(in

intial_Dream的博客 615

hdu 1010——tempter of the bone题解

​ 那么如何得知S、D的0,1情况呢,就看f(曼哈顿距离)的奇偶性,如果f为奇数,说明S、D一个为1,一个为0,如果f为偶数,说明S、D全为1或全为0。​ 从题目中我们可以发现可行性剪枝的方法:一共走T步,现在走了K步,还要走X步,这时候要判断是否还可以走X步。​ (2)S、D一个为1一个为0时,当T为奇数时,可能有解,当T为偶数时,一定无解。出发,每步走一块地板,在每块地板不能停留,而且走过的地板都不能再走。​ (1)S、D同0或同1,当T为偶数时,可能有解,当T为奇数时,一定无解。

m0_74375748的博客 319

hdu 1010 Tempter of the Bone[dfs]

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010

835

HDU1010——Tempter of the Bone

http://acm.hdu.edu.cn/showproblem.php?pid=1010 这道题讲的是起点是S要到达D点是否可以恰好在规定的T时间到达,而且走的路径不能返回。 解题思路:用的是深搜,搜索是否在T时间是正好到达D点 剪枝:奇偶剪枝,访问范围不能超过图的范围,访问过了或者遇到X都是不能继续访问了。 难点:状态改变有坐标和时间,以时间为判断结束标识。 #inc...

aozhe0658的博客 139

hdu-1010 Tempter of the Bone

http://acm.hdu.edu.cn/showproblem.php?pid=1010 题意:在n*m的地图上,标记为S的为狗狗的起点,D为门,问能否恰好以给定t的时间到达D,能就输出YES,否则NO,每个点只能走一次。 思路:dfs问题,找到一条长度恰好为t的路径,不一定是最短路路径,所以不能单纯用bfs。 但是  一般dfs会超时,所以要剪枝,这里主要用到奇偶性剪枝,参考链接:

有一种力量叫乐观 667
下一篇: HDU1002
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值