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.pswp.cn/news/900262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900262.shtml
英文地址,請注明出處:http://en.pswp.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…