acwing BFS

news2024/10/6 12:29:40

BFS

  • BFS 重点就是要使用 队列 进行每一层的搜索
  • 不同题目 队列中保存的元素形式都各不相同,并且也会用到其他辅助结构
  • 走迷宫一题,队列中存的是每一层(当前步能走的所有坐标)的坐标,并保存了每一层对应走过的步数
  • 八数码一题,队列中存的是每一层(当前x位置可以发生交换位置对应的交换后的结果)可能的交换后的序列,并保存了每种交换后的序列所对应的交换次数
  • 二叉树的层序遍历就是 BFS

AcWing 844. 走迷宫

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 109, MAX = 0x3f3f3f3f;
int n, m, maze[N][N], ret, d[N][N];
// 队列的作用是将对头元素的下一层元素全部放入队列
queue<pair<int, int>> m_next; 
int bfs(int x, int y)
{
    int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
    m_next.push({x, y});
    maze[x][y] = 1;
    while(m_next.size())
    {
        pair<int, int> cur = m_next.front();
        m_next.pop();
        for (int i = 0; i < 4; i ++ )
        {
            int cx = cur.first + dx[i], cy = cur.second + dy[i];
            if(cx >= 0 && cx < n && cy >= 0 && cy < m && maze[cx][cy] == 0)
            {
                m_next.push({cx, cy});
                maze[cx][cy] = 1;
                d[cx][cy] = d[cur.first][cur.second] + 1;
            }
        }
    }
    return d[n - 1][m - 1];
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < m; j ++ )
            cin >> maze[i][j];
    cout << bfs(0, 0);
    return 0;
}

AcWing 845. 八数码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <queue>
#include <unordered_map>
using namespace std;
queue<string> m_next;
unordered_map<string, int> m_step;
char grid[3][3];
string str;
int main()
{
    int index = 0;
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            cin >> grid[i][j];
            str += grid[i][j];
        }
    } 
    m_next.push(str);
    m_step[str] = 0;
    int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
    while (m_next.size())
    {
        string cur = m_next.front();
        m_next.pop();
        int step = m_step[cur];
        if(cur == "12345678x")
        {
            cout << m_step[cur];
            return 0;
        }
        int xcur = cur.find('x');
        for(int i = 0; i < 4; ++i)
        {
            int cx = xcur / 3 + dx[i], cy = xcur % 3 + dy[i];
            if(cx >= 0 && cx < 3 && cy >= 0 && cy < 3)
            {
                swap(cur[xcur], cur[cx * 3 + cy]);
                if(m_step.find(cur) == m_step.end())
                {
                    m_step[cur] = step + 1;
                    m_next.push(cur);
                }
                // 为不影响其他可能发生交换的位置,需要还原
                swap(cur[xcur], cur[cx * 3 + cy]);
            } 
        }
    }
    cout << -1;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Traceview 定位卡顿问题

Traceview 是一个 Android 性能分析工具&#xff0c;用于时间性能分析&#xff0c;主要帮助开发者了解应用程序中各个方法的执行时间和调用关系。Traceview 可以通过图形化界面查看应用程序的代码执行细节&#xff0c;包括每个方法的调用次数、方法调用的时间消耗、方法调用堆栈…

家政服务小程序搭建,有什么优势?

随着我国社会经济的发展&#xff0c;家政服务成为了每个家庭的一部分。家政服务的种类也逐渐多样&#xff0c;满足了大众日益增加的服务需求。 不过&#xff0c;传统的家政行业以中介为主&#xff0c;雇主在找到适合的家政人员较为麻烦&#xff0c;限制了家政行业的发展&#…

【基于 InternLM 和 LangChain 搭建你的知识库】学习笔记

学习参考文档【基于 InternLM 和 LangChain 搭建你的知识库】 学习参考链接【书生・浦语大模型实战营第三课作业(基础进阶)】 理论 实战 收集原始数据 收集2018年-2020年几年间的优秀数学建模论文 修改脚本文件&#xff0c;测试文件 作业 复现课程知识库助手搭建过程 La…

曲线生成 | 图解贝塞尔曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 贝塞尔曲线的应用2 图解贝塞尔曲线3 贝塞尔曲线的性质4 算法仿真4.1 ROS C仿真4.2 Python仿真4.3 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、采样法…

CAN工具 - ValueCAN3 - 基础介绍

关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”&#xff0c;即可获得canoe入门到精通电子书和INCA软件安装包&#xff08;不带授权码&#xff09;下载地址。 CAN/CANFD通讯广泛存在于整个车载网络中&#xff0c;几乎每一块软硬件的开发都需要用到CAN工具&#xff0c…

Open CASCADE学习|创建旋转体

旋转体是一个几何概念&#xff0c;指的是通过旋转一个平面图形得到的立体图形。具体来说&#xff0c;一个平面图形绕着它所在的平面内的一条定直线旋转一周所形成的曲面&#xff0c;这个曲面会围成一个几何体&#xff0c;这个几何体就叫做旋转体。这条定直线被称为旋转体的轴。…

划重点!多微信号一键定时发圈,省时省力!

发朋圈对于很多职场人来说是一种社交媒体营销和个人品牌建设的重要手段。 然而&#xff0c;一个人面对几个微信号的朋友圈&#xff0c;难免会有应付不过来的时候&#xff0c;这时候只需要一个个微管理管理系统&#xff0c;就能帮你一键定时发圈&#xff0c;省去重复发布的时间…

从零开始:生产环境如何部署 Bytebase

Bytebase 是面向研发和 DBA 的数据库 DevOps 和 CI/CD 协同平台。目前 Bytebase 在全球类似开源项目中 GitHub Star 数排名第一且增长最快。 Bytebase 的架构 Bytebase 是一个单体架构 (monolith)&#xff0c;前端是 Vue3 TypeScript&#xff0c;后端是 Go。前端利用 Go 1.6 …

说说TCP 3次握⼿和4次握手

三次握手过程 client端建⽴连接&#xff0c;发送⼀个SYN同步包&#xff0c;发送之后状态变成SYN_SENTserver端收到SYN之后&#xff0c;同意建⽴连接&#xff0c;返回⼀个ACK响应&#xff0c;同时也会给client发送⼀个SYN包&#xff0c;发送完成之后状态变为SYN_RCVDclient端收到…

匹配excel表格中两列数据

案例&#xff1a;时间序列D列是打乱的&#xff08;假的时间序列&#xff09;&#xff0c;那么真正的时间序列G&#xff0c;需要将数值一一匹配。那么要输入公式&#xff1a;VLOOKUP(G2,D$2:E$144,2,FALSE) 其中&#xff0c;G2是一个查询的属性&#xff0c;D$2:E$144是被查询的表…

鸿蒙开发笔记(三):页面和自定义组件生命周期

先明确自定义组件和页面的关系&#xff1a; 自定义组件&#xff1a;Component装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。 页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;Entry装饰的自定义组件为页面的入口组件&#xff0c…

Linux网络通信

网络模型 七层模型 四层模型 TCP : 面向连接&#xff0c;可靠的&#xff0c;面向字节流&#xff0c;支持点对点通信。 UDP : 无连接&#xff0c;不可靠&#xff0c;面向数据报文&#xff0c;支持一对一&#xff0c;一对多&#xff0c;多对多。通信原理 常用函数 #include <…

LC 82. 删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II 难度&#xff1a; 中等 题目大意&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 提示&#xff1a; 链表中节点数目在范围 [0, 300] 内-…

GIT SourceTree 回滚提交

步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 在终端输入命令&#xff08;位置是项目目录下&#xff09; git push origin feature_mo2.1_r3_zhanx653 -f

#LLMOps##AIGC# Dify_构建本地知识库问答应用-生成Al应用的创新引擎 用于构建助手API和GPT的开源开发平台

github&#xff1a; https://github.com/langgenius/dify/blob/main/README_CN.md 介绍文档&#xff1a;https://docs.dify.ai/getting-started/readme Dify 介绍 Dify 笔记 Dify 是什么&#xff1f; 开源的大语言模型&#xff08;LLM&#xff09;应用开发平台融合了后端即服…

电商服务类指标分析(2)——售后管理模块指标

段时间做了一个电商服务类项目&#xff0c;与业务一起梳理了部分指标&#xff0c;这些指标便于了解电商服务&#xff0c;现在做一个整理和回顾。 电商服务类指标可以分为五大类&#xff0c;涵盖了服务从售前、履约、售后、用户反馈、监控预警这样一条链路的内容。 本篇文章来聊…

React入门 - 02(工程目录结构解析)

本章内容 目录 1 外层“文件”说明2 各个“文件夹”说明 接着上一节的内容&#xff0c;我们继续这一节的内容–工程目录文件解析。打开上一节已经建好的工程 react-demo,详细的来了解一些里面的文件。 1 外层“文件”说明 .gitignore — 当我们使用 git 的时候&#xff0c;希…

统计学习 复习(知识点+习题)

复习资料&#xff1a;https://github.com/RuijieZhu94/StatisticalLearning_USTC 第一章 线性回归 1. From one to two 最小二乘 课后题 有偏/无偏估计 加权最小二乘 2. Regularization 线性回归&#xff08;二维情况&#xff09; 求解有约束优化问题 正则化最小加权二乘…

Web3与环保:区块链如何推动可持续发展

随着气候变化和环境问题日益严峻&#xff0c;社会对可持续发展的需求变得愈发迫切。在这个背景下&#xff0c;Web3技术和区块链崭露头角&#xff0c;成为推动可持续发展的关键力量。本文将深入探讨Web3技术如何与环保理念相结合&#xff0c;引领我们迈向更加可持续的未来。 1. …

Java异常:toString()和getMessage()区别

首先写了两个错误 Controller public class DemoController {RequestMapping("/show1")public String showInfo(){String str null;str.length();return "index";}RequestMapping("/show2")public String showInfo2(){int a 10/0;return &quo…