| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【BFS】八数码问题(c++基础算法) -> 正文阅读 |
|
[数据结构与算法]【BFS】八数码问题(c++基础算法) |
目录 一.读题作为最经典的一道宽度优先搜索题,它的题面并不是很难懂。
很显然,这是要我们求出矩阵1通过白色方块的上下左右移动转化向矩阵2的最小步数。 二.在做题之前在做题之前,我们先要弄懂3个问题。 1.康拓展开在这道题中,我们要利用康托展开判断是否重复。在文前,蒟蒻已经写了一篇文章,不懂的可以去看一下:【宽搜必备】康托展开(从公式解析到代码实现) 那么,我们就可以写出:
2.DFS和BFS的区别bfs 遍历节点是先进先出,dfs遍历节点是先进后出; 3.栈和队列的区别(1)栈和队列的出入方式不同:栈是后进先出、队列是先进先出。 现在,我们搞懂了这三个问题,就可以做题了。 三.做题1.算法原理采用BFS遍历的方式寻找最优路径。 首先定义一个结构体ma来存放八数码的每一个状态信息,其中包括节点对应的矩阵,节点在BFS遍历树中的深度(相当于步数),以及节点对应的康托值。然后,定义visited数组存放已经访问过的节点状态。 利用队列实现遍历,具体步骤如下: 1.将初始状态的各种信息压入队列中。 2.算法实现①队列因为此队列要存的东西是一个结构体,因此也要把其类型定为结构体ma ②康托展开在此代码中,康托展开用于判重。要将一个3*3的矩阵换为一个数。首先,我们要把此二维数组变为一维的。
然后,进行康拓转化。最后就是这样
?③标记很简单,用数组flag标记康托值即可 四.AC代码
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 20:06:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |