poj3083Children of the Candy Corn

【题解】POJ3083 Children of the Candy Corn(DFS + BFS) POJ3083 Children of the Candy Corn 明天写 阅读详情
题目链接:

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98233#problem/F
dfs与bfs的水题,就是沿最左边走,沿最右边走,题意不太好理解。

题意:

1.沿着左边的墙从 S 一直走,求到达 E 的步数。

2.沿着右边的墙从 S 一直走,求到达 E 的步数。

3.求最短路。

大体思路:

最短路就不用说了,一个bfs搞定。另外两种,有点麻烦,不过搞清楚转向了还是很容易的。
拿沿着最左边走举例吧。当前方向如果是向上,那么先往左走,如果像左走不了,就像右逐步旋转,搜索方向顺序左,上,右,下。

当前方向     检索顺序

 ↑ :      ← ↑ → ↓

 → :       ↑ → ↓ ← 

 ↓ :      → ↓ ← ↑ 

 ← :       ↓ ← ↑ → 

1    0  1  2  3
↑ : ← ↑ → ↓
用一个数组下标来表示方向,新方向下标等于(curDir-1+i+4)%4
代码:

代码有点挫。QAQ

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<queue>
using namespace std;
struct node
{
    int i;
    int j;
};
char map[45][45];
int vis[45][45];
int h, w;
struct node S;
struct node E;
struct node leftMove[4] = { { 0, -1 }, { -1, 0 }, { 0, 1 }, {1,0} };
struct node rightMove[4] = { { 0, 1 }, { -1, 0 }, { 0, -1 }, {1,0} };
int stepLeft;
int stepRight;
int stepMin;
int flag;
void leftDfs(int curDir,struct node cur)
{
    stepLeft++;
    if (cur.i == E.i && cur.j == E.j)
    {
        flag = true;
        return;
    }
    for (int i = 0; i < 4; i++)
    {
        int dir = (curDir - 1+i + 4) % 4;
        struct node x = cur;
        x.i += leftMove[dir].i;
        x.j += leftMove[dir].j;
        if (!flag&&x.i >= 0 && x.i<h && x.j >= 0 && x.j<w&&map[x.i][x.j] != '#')
        {
            leftDfs(dir,x);
        }
    }

}
void rightDfs(int curDir,struct node cur)
{
    stepRight++;
    if (cur.i == E.i && cur.j == E.j)
    {
        flag = true;
        return;
    }
    for (int i = 0; i < 4; i++)
    {
        int dir = (curDir - 1 + i + 4) % 4;
        struct node x = cur;
        x.i += rightMove[dir].i;
        x.j+=rightMove[dir].j;
        if (!flag&&x.i >= 0 && x.i<h && x.j >= 0 && x.j<w&& map[x.i][x.j] != '#')
        {
            rightDfs(dir,x);
        }
    }
}
void bfs()
{
    queue<node> q;
    vis[S.i][S.j] = 1;
    q.push(S);
    struct node cur;
    while (!q.empty())
    {
        cur = q.front();
        if (cur.i == E.i && cur.j == E.j)
        {
            return;
        }
        q.pop();
        for (int i = 0; i < 4; i++)
        {
            struct node x = cur;
            x.i += rightMove[i].i;
            x.j += rightMove[i].j;
            if (x.i >= 0 && x.i < h && x.j >= 0 && x.j < w&&!vis[x.i][x.j] && map[x.i][x.j] != '#')
            {
                vis[x.i][x.j] = vis[cur.i][cur.j]+1;
                q.push(x);
            }
        }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    while (n--)
    {
        memset(map,0,sizeof(map));
        memset(vis,0,sizeof(vis));
        stepLeft = 0;
        stepRight = 0;
        stepMin = 0;
        scanf("%d%d",&w,&h);
        for (int i = 0; i < h; i++)
        {
            for (int j = 0; j < w; j++)
            {
                cin >> map[i][j];
                if (map[i][j] == 'S')
                {
                    S.i = i;
                    S.j = j;
                }
                if (map[i][j] == 'E')
                {
                    E.i = i;
                    E.j = j;
                }
            }
        }
        flag = false;
        leftDfs(1,S);
        flag = false;
        rightDfs(1,S);
        bfs();
        printf("%d %d %d\n",stepLeft,stepRight,vis[E.i][E.j]);

    }
    system("pause");
    return 0;
}
【poj 3083】Children of the Candy Corn 中文题意&题解&代码(C++) poj3083 阅读详情

相关推荐

POJ - 3083:Children of the Candy Corn

Children of the Candy Corn 来源: 标签: 参考资料: 相似题目: 题目 The cornfield maze is a popular Halloween treat. Visitors are shown the entrance and must wander through the maze facing zomb...

WINGREZ‘S BLOG 755

DFS—POJ3083-Children of the Candy Corn

题目POJ3083大意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 先输出左转优先时,从S到E的步数 再输出右转优先时,从S到E的步数 最后输出S到E的最短步数   W为宽,列数 H为高,行数   解题思路: DFS和BFS的综合题,但是写代码时要注意几方面:   1、 左转、右转优先搜索时必须标记当前位置

zhuma的编程学习 986

为什么需要知识图谱?什么是知识图谱?——KG的前世今生

我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术

SimmerChan的专栏 8万+

Poj 3083 Children of the Candy Corn

题目大意:前提:(迷宫中一直向左或者向右走(可用DFS),一定可以走出迷宫,即从S走到T) 要求输出一直向左走走出迷宫需要的步数,一直向右走走出迷宫需要的步数,和走出迷宫需要的最小步数(两次深搜,一次广搜) 附AC代码 #include<iostream> #include<queue> using namespace std; #define MapMax 40 #def...

RoronoaDZoro的博客 291

CoaXPress FMC子卡:高速图像采集与FPGA原型开发实战指南

在机器视觉和工业检测领域,高速、可靠的数据传输是核心需求。CoaXPress(CXP)协议作为一种基于同轴电缆的高速接口标准,通过其高带宽、长距离传输和低延迟的特性,有效解决了传统接口在确定性实时传输方面的短板。其技术价值在于为海量图像数据提供了稳定、高效的物理层和数据链路层解决方案,广泛应用于半导体检测、医疗成像等对吞吐量有极致要求的场景。要实现CXP系统的快速原型验证,集成了高速SerDes接口和时钟管理的FMC子卡与FPGA开发板的组合成为关键。这种平台将复杂的硬件设计封装,让开发者能聚焦于图像处理算

weixin_31815843的博客 278

吐血总结《Mysql从入门到入魔》,图文并茂

文章目录1. 查询1.1 查询多列1.2 检索唯一值1.3 限制输出1.4 注释2. ORDER BY 排序2.1 单列排序3.2 多列排序3.3 指定排序方向4. WHERE 过滤数据4.1 WHERE 子句操作符4.2 范围值检查4.3 空值检查5. 高级数据过滤5.1 WHERE 组合过滤5.2 IN 操作符5.3 NOT 操作符6. 通配符过滤6.1 % 通配符6.2 _ 通配符7. 创建计算字段7.1 计算字段7.2 拼接字段7.3 执行算数计算8. 函数8.1 常用文本处理函数8.2 日期和时间

向日葵的专属太阳 3万+

poj 3083 Children of the Candy Corn【BFS+DFS】

    poj 3083 Children of the Candy Corn Children of the Candy Corn Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9528   Accepted: 4126 Description The cornfield maz...

Y390d的博客 256

告别配置烦恼!保姆级教程:在Windows 10/11上为QT5.14.2配置MSVC2017编译器(附VS2022组件避坑指南)

本文提供了一份详细的保姆级教程,指导如何在Windows 10/11上为QT5.14.2配置MSVC2017编译器,包括VS2022组件避坑指南。从环境准备到关键配置,再到调试工具验证和Qt Creator中的编译器设置,一步步解决常见问题,帮助开发者快速搭建稳定可靠的开发环境。

weixin_30615767的博客 502

【POJ 3083】Children of the Candy Corn

POJ【3083】Children of the Candy Corn Dfs+Bfs

ACMer' 1074

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

PCL K4PCS算法实现点云粗配准【2026最新版】

K4PCS算法实现点云粗配准。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 42万+

poj 3083 Children of the Candy Corn

题目链接:点击打开链接

飞火扑蛾的专栏 522

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

【POJ3083】Children of the Candy Corn

本题传送门 本题知识点:深度优先搜索 + 宽度优先搜索 本题题意是求三个路径长度,第一个是一直往左手边走的距离,第二个是一直往右手边走的距离,第三个是最短距离。 第三个很好办,就是一个简单的bfs的模板,问题出在第一二个。 但第一二个只是方向的丝丝不同,所以会其中一个也就解决了。 读懂题意后很简单,问题是怎么简单高效地实现。 推荐这篇博客 一些感慨:该题做了我差不多4个小时吧,前前后后d...

LT4585的博客 304

辉芒微教程第七篇《PWM与PWM3调节LED灯的亮度》

这个其实就是PR3L = 128设置的,由于我们刚刚寄存器设置了8位模式,其设置的范围就是0-255,而128/255≈50%左右,因此PR3L就是我们的占空比调节的寄存器,我们可以通过它来调节占空比,大家可以试试它占空比设置10%,30%,60%来看看它的不同效果,灯的亮度是肯定不一样的,如果有条件的朋友,可以购买一款逻辑分析仪去看他的占空比。平平无期的这个东西有什么东东用,貌似是没什么用,只是一个概念而已,是不是不同设备可以设置1秒,3秒,10秒的周期就行?但是它占空比为什么是50%,怎么得来的?

qq_41809823的博客 826

计算机控制技术及应用

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

POJ-3083 Children of the Candy Corn

这是一道深搜加广搜的题目,在房间里模拟走迷宫走了两圈才搞清楚原理,因为在一些小细节的地方出错,花了很久才解决了这道题,对我来说还是很有意义的一道题,用的是C写的 题目大意: 在迷宫中从起点走到终点,每走一步加一,起点和终点也要加一。要求输出三种不同的移动方式所需的步数,分别是一直靠着左边走、一直靠着右边走、最短路径。靠左和靠右走有点不好理解,接下来重点研究一下。 难点: 靠左走的意思是:每走一步...

打代码的小明的博客 407

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

POJ-3083 Children of the Candy Corn 解题报告

Description The cornfield maze is a popular Halloween treat. Visitors are shown the entrance and must wander through the maze facing zombies, chainsaw-wielding psychopaths, hippies, and other terro

岁月流风、、 1254

Devexpress16.2.6破解工具

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

POJ 3083 Children of the Candy Corn

题目链接:http://poj.org/problem?id=3083 题目分析:

Saber 586

POJ 3083 Children of the Candy Corn

Children of the Candy Corn Time Limit:1000MS Memory Limit:65536K Total Submissions:7551 Accepted:3292 Description The cornfield maze is a popular Hallo...

anvt77205的博客 200

POJ 3083--Children of the Candy Corn

题目:这是题目 题意:一个迷宫,从S点走到E点,求一直靠墙向左走和靠墙向右走以及随便走的最短路, 保证数据的合法性,一定会有路。 定义的方向: int x[4] = {0, -1, 0, 1};//左 上 右 下 int y[4] = {-1, 0, 1, 0}; 思路:要求靠墙向左走和靠墙向右走,用DFS,求随便走最短路用BFS。该题的比较难的地方是处理方向。

Time_Life的专栏 492

POJ 3083, Children of the Candy Corn

Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 2934Accepted: 1418 DescriptionThe cornfield maze is a popular Halloween treat. Visitors are shown the entrance and must wander through the...

weixin_33862514的博客 288

POJ 3083 Children of the Candy Corn

Description The cornfield maze is a popular Halloween treat. Visitors are shown the entrance and must wander through the maze facing zombies, chainsaw-wielding psychopaths, hippies, and other terro

Occult 619

poj3083 Children of the Candy Corn

比较简单的搜索题,用到了dfs和bfs。dfs比较适合搜索有无可行解,如本题中左转优先和右转优先是利用dfs算法求解得,而bfs适合寻找最优解,如本题最短路径就是bfs。 这道题有一个比较需要注意的地方就是bfs时用visit[][]记录是否访问时,一定要在加入que队列的时候就修改visit[x][y]的值,我第一次是在出队列的时候修改其值,因为想的是出队列 时才是访问它的时候,但是这样就大

monkeyduck的专栏 1030
上一篇: C/C++中内存对齐问题
下一篇: PAT1095Cars on Campus
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值