6.1 宽度优先搜索算法(BFS)

        宽度优先搜索算法(BFS  Breadth first search) 又称广度优先搜索,这种搜索是逐层的,搜索完上层,才会搜索下一层,直到找到目标节点。
        
        搜索过程如图中箭头方向:
【例如】 八数码难题:利用空格的移动,使无规律的图案变成右侧有顺序的图案,下图所示:
思路如下:罗列所有可能情况;然后逐一检查是否是答案。
主要算法:
1. 查找左右移动后的图形:
/// <summary>
        /// 空格向左移动,前提是空格不在最左一列
        /// </summary>
        /// <returns></returns>
        public ChessPos MoveLeft()
        {
            //若空格在最左边界上,无法左移
            if (ZeroColumn==0)
            {
                return null;
            }
            //先拷贝当前的,然后把空格左移动一位,交换下两个的数字
            ChessPos tmpPos = this.Clone() as ChessPos;                       
           
            tmpPos.father = this;
            tmpPos.position[ZeroRow, ZeroColumn] = position[ZeroRow, ZeroColumn - 1];
            tmpPos.position[ZeroRow, ZeroColumn - 1] = position[ZeroRow, ZeroColumn];
            return tmpPos;
        }
2.从Openlist中取节点、展开、然后添加到closedlist

 //当Open表中有内容,
            while (OpenList.Count > 0 && !bFindSolution)
            {
                //1.从Open表表头取一个对象,若该位置没有在closed表出现过,则放入到Close表。
                ChessPos tmp = OpenList[0];
                OpenList.RemoveAt(0);

                //判断该布局是否在close表中已经出现过
                bool bAlreadyExist = false;
                for (int i = 0; i <= CloseList.Count - 1; i++)
                {
                    if (CloseList[i].Equals(tmp))
                    {
                        bAlreadyExist = true;
                        break;
                    }
                }
                if (bAlreadyExist == false)
                {
                    CloseList.Add(tmp);
                }

                //2.获得新的4种空格的可能走法
                List<ChessPos> PossibleSteps = tmp.getNextPosition();
                foreach (ChessPos pos in PossibleSteps)
                {
                    //看是否已经达到最终位置
                    if (pos.IsSolution())
                    {
                        bFindSolution = true;
                        solution = pos;
                        break;
                    }
                    else if (CloseList == null || !CloseList.Contains(pos)    )
                    {
                        //若新的图案在open&close表中都没有出现过,则加入open表中
                        if(OpenList == null || !OpenList.Contains(pos) )
                        {
                            OpenList.Add(pos);
                        }
                    } 
                }
                OnProgressChanged(new ChessPosEventArg(OpenList.Count, CloseList.Count));
                //超过3万就不搜索了
                if (CloseList.Count > 30000)
                {
                    break;
                }
            }
 

代码在可以下载: https://download.csdn.net/download/qq_34047402/90563588
深度搜索、宽度搜索算法(以八数码、皇后、迷宫为例)资源-CSDN文库
https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d292c1bt6mw2Y&ft=t&id=905463299574

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

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

相关文章

基于LSTM的文本分类2——文本数据处理

前言 由于计算机无法认识到文字内容&#xff0c;因此在训练模型时需要将文字映射到计算机能够识别的编码内容。 映射的流程如下&#xff1a; 首先将文字内容按照词表映射到成唯一的数字ID。比如“我爱中国”&#xff0c;将“中”映射为1&#xff0c;将“国”映射到2。再将文…

Redis数据结构之ZSet

目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合&#xff0c;且不允许重复的成员&#xff0c;不同的是ZSet…

什么是DHCP服务,在生活中的应用是什么?

提起DHCP&#xff0c;不接触互联网的可能会很陌生&#xff0c;其实并没有这么高深&#xff0c;简明扼要的说就是可以自动为连接的设备分配IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;dns等网络参数。使连接步骤简化&#xff0c;从而提高效率。 主要功能&#xff…

2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点

4月2日&#xff0c;以"科技助农数据兴业”为主题的2025AI智能数字农业研讨会在苏州国际博览中心盛大启幕。本次盛会吸引了来自全国各地相关部门领导、知名专家学者、行业协会组织&#xff0c;以及县级市农业企业代表、县级市农产品销售商等万名嘉宾齐聚姑苏城&#xff0c;…

论文导读 | SOSP23 | Gemini:大模型 内存CheckPoint 快速故障恢复

本期分享的是一篇SOSP 2023论文&#xff1a; Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…

wordpress可视化数据采集Scrapes插件,WP博客网站自动采集发布

源码介绍 wordpress自动采集Scrapes插件&#xff0c;支持ripro&#xff0c;modown&#xff0c;子比&#xff0c;7b2等多种WordPress主题 支持PHP7.4&#xff0c;PHP8.0及以上不支持 上传插件到wp-content/plugins目录&#xff0c;然后解压 不需要写采集规则&#xff0c;傻瓜式…

JavaScript Math(算数)指南

JavaScript Math&#xff08;算数&#xff09;指南 引言 JavaScript的Math对象是一个内置对象&#xff0c;提供了进行数学运算的方法和值。它对于执行基本的数学计算、生成随机数以及执行更复杂的数学操作非常有用。本文将详细介绍JavaScript中的Math对象&#xff0c;涵盖其常…

Deep Reinforcement Learning for Robotics翻译解读

a. 机器人能力 1 单机器人能力&#xff08;Single-robot competencies&#xff09; 运动能力&#xff08;Mobility&#xff09; 行走&#xff08;Locomotion&#xff09;导航&#xff08;Navigation&#xff09; 操作能力&#xff08;Manipulation&#xff09; 静态操作&…

最新扣子(Coze)案例教程:最新抖音视频文案提取方法替代方案,音频视频提取文案插件制作,手把手教学,完全免费教程

&#x1f468;‍&#x1f4bb; 星球群同学反馈&#xff0c;扣子平台的视频提取插件已下架&#xff0c;很多智能体及工作流不能使用&#xff0c;斜杠君这里研究了一个替代方案分享给大家。 方案原理&#xff1a;无论是任何视频或音频转文案&#xff0c;我们提取的方式首先都是要…

yum list查询时部分包查找不到流程分析

以下是针对 yum list available -c xxx.repo&#xff08;对应 DNF 的命令行操作&#xff09;的详细流程解读&#xff0c;包括参数解析、配置初始化、元数据加载、数据库查询&#xff0c;以及读取不到特定包的场景分析。 1. 命令行参数解析与入口函数 代码入口: dnf.cli.main.m…

k8s 1.23升级1.24

0、简介 这里只用3台服务器来做一个简单的集群&#xff0c;当前版本是1.23.17目标升级到1.24.17 地址主机名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 我这里设置的master2可调度pod&#xff0c;将master2的污点去掉 kubectl de…

# 实时人脸识别系统:基于 OpenCV 和 Python 的实现

实时人脸识别系统&#xff1a;基于 OpenCV 和 Python 的实现 在当今数字化时代&#xff0c;人脸识别技术已经广泛应用于各种场景&#xff0c;从手机解锁到安防监控&#xff0c;再到智能门禁系统。今天&#xff0c;我将通过一个完整的代码示例&#xff0c;详细讲解如何使用 Pyt…

Linux:(五种IO模型)

目录 一、对IO的重新认识 二、IO的五种模型 1.阻塞IO 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 6.一些概念的解释 三、非阻塞IO的代码实现 1.fcntl 2.实现主程序 一、对IO的重新认识 如果有人问你IO是什么&#xff0c;你该怎么回答呢&#xff1f; 你可能会说…

将电脑控制手机编写为MCP server

文章目录 电脑控制手机后,截屏代码复习MCP server构建修改MCP的config文件测试效果困惑电脑控制手机后,截屏代码复习 def capture_window(hwnd: int, filename: str = None) -> dict:""&

[ctfshow web入门] web6

前置知识 入口点(目录)爆破 还记得之前说过网站的入口的吗&#xff0c;我们输入url/xxx&#xff0c;其中如果url/xxx存在&#xff0c;那么访问成功&#xff0c;证明存在这样一个入口点&#xff1b;如果访问失败则证明不存在此入口点。所以我们可以通过遍历url/xxx&#xff0c;…

【计算机网络】Linux配置SNAT策略

什么是NAT&#xff1f; NAT 全称是 Network Address Translation&#xff08;网络地址转换&#xff09;&#xff0c;是一个用来在多个设备共享一个公网 IP上网的技术。 NAT 的核心作用&#xff1a;将一个网络中的私有 IP 地址&#xff0c;转换为公网 IP 地址&#xff0c;从而…

Mathematics | Branch

注&#xff1a;本文为“遇见数学”翻译的 “数学分支概览” 两篇文章合辑。 数学世界的版图&#xff1a;主要分支概览&#xff08;上&#xff09; 原创 遇见数学 2025 年 04 月 03 日 12:02 河南 数学的分支&#xff08;Areas of Mathematics&#xff09; 在文艺复兴之前&am…

Ubuntu(CentOS、Rockylinux等)快速进入深度学习pytorch环境

这里写自定义目录标题 安装进入系统&#xff08;如Ubuntu22.04&#xff09;安装anacondapip、conda换源pip换源conda换源 安装nvidia安装pytorch环境针对于wsl的优化 安装进入系统&#xff08;如Ubuntu22.04&#xff09; docker 、 wsl 、 双系统 、服务器系统 推荐 Ubuntu 20…

什么是混杂模式?为什么 macvlan 依赖它

在 macvlan 场景中&#xff0c;物理网络是否支持混杂模式&#xff08;Promiscuous Mode&#xff09; 直接影响 macvlan 虚拟接口的通信能力。以下是详细解释和操作指南&#xff1a; 一、什么是混杂模式&#xff1f;为什么 macvlan 依赖它&#xff1f; 混杂模式的定义 当物理网络…

物理数据流图

物理数据流图&#xff08;Physical Data Flow Diagram, PDFD&#xff09;详解 物理数据流图是结构化系统分析中的一种建模工具&#xff0c;用于描述系统在物理环境下的具体实现方式&#xff0c;包括硬件、软件、人工操作和物理文件等实际组成部分。它与**逻辑数据流图&#xf…