算法-圖-數據結構(鄰接矩陣)-BFS廣度優先遍歷

鄰接矩陣廣度優先遍歷(BFS)是一種用于遍歷或搜索圖的算法,以下是具體介紹:

1. 基本概念
??? 圖是一種非線性的數據結構,由頂點和邊組成,可分為無向圖、有向圖、加權圖、無權圖等。鄰接矩陣是表示圖的一種數據結構,是一個二維數組,其中行和列都對應圖中的頂點。如果頂點i與頂點j之間存在一條邊,則矩陣的第i行第j列的元素為1;否則為0[^4^]。
??? 廣度優先搜索是一種遍歷或搜索圖的算法,它按照從根節點到最遠節點的層次順序進行搜索。在鄰接矩陣中,BFS可以使用隊列實現。

2. 算法步驟
? 2.1 初始化隊列,用于存儲待訪問的節點,并將起點加入隊列。
? 2.1 標記已訪問節點,通常使用一個數組來記錄每個節點是否已被訪問過,以避免重復訪問。
? 2.3從隊列中取出一個節點,檢查該節點是否為目標節點。如果是,則搜索結束;如果不是,將其所有未訪問的鄰接節點加入隊列,并標記為已訪問。
?? 重復步驟3,直到隊列為空或找到目標節點

3.算法實現

圖數據結構定義

package com.example.demo;
//鄰接矩陣廣度優先遍歷
public class YuGraph {private String[] v;private int[][] vG;//默認空構造YuGraph(){}//初始賦值構造YuGraph(String[] v,int [][] vG ){this.v=v;this.vG=vG;}public String[] getV() {return v;}public void setV(String[] v) {this.v = v;}public int[][] getvG() {return vG;}public void setvG(int[][] vG) {this.vG = vG;}
}

BFS算法實現

package com.example.demo;import java.util.ArrayDeque;
import java.util.List;
import java.util.Queue;//廣度優先遍歷
public class YuTestBFS {//插入變的關系public static void insertBian(int [][] a, int i,int j){a[i][j]=1;}public static void bfsCreate(){//創建頂點String[] v=new String[]{"A","B","C","D","E"};//創建邊int [][] vG=new int[v.length][v.length];//插入ab,bc,be,cdinsertBian(vG,0,1);//bcinsertBian(vG,1,2);//beinsertBian(vG,1,4);//cdinsertBian(vG,2,3);//創建鄰接矩陣YuGraph graph=new  YuGraph(v,vG);//打印結果System.out.println("頂點");for(int i=0;i<graph.getV().length;i++){System.out.print(graph.getV()[i]);System.out.print(" ");}System.out.println();System.out.println("鄰接矩陣");for(int i=0;i<graph.getvG().length;i++){for(int j=0;j<graph.getV().length;j++){System.out.print(graph.getvG()[i][j]);System.out.print(" ");}System.out.println();}//BFS訪問實現//1.定義訪問標記列表boolean [] flagArr=new boolean[v.length];for(int i=0;i<v.length;i++){flagArr[i]=false;}//2.定義輔助隊列Queue<Integer> queue=new ArrayDeque<>();//A頂點入隊queue.offer(0);flagArr[0]=true;System.out.print("BFS廣度優先訪問頂點:");System.out.print(v[0]);System.out.print(" ");//當隊列不為空,逐層訪問while (!queue.isEmpty()){//對頭出隊int vHead= queue.poll();//訪問隊頭所在的鄰接矩陣for(int i=0;i<v.length;i++){if(graph.getvG()[vHead][i]==1&&flagArr[i]==false){//訪問System.out.print("訪問 ");System.out.print(v[i]);System.out.print(" ");flagArr[i]=false;//被訪問的點入隊queue.offer(i);}}}}public static void main(String[] args) {bfsCreate();}
}

結果樣例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71869.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【HDLbits--Comb組合邏輯】

HDLbits--Comb組合邏輯 1.5 組合邏輯1.5 Demo 在 Verilog 中&#xff0c;組合邏輯&#xff08;Combinational Logic&#xff09;是指輸出僅依賴于當前輸入的邏輯電路&#xff0c;沒有記憶功能&#xff08;即沒有狀態存儲&#xff09;。組合邏輯的特點是&#xff1a; 無時鐘信號…

ARM Cortex-M3 技術解析:核寄存器R1-R15介紹及使用

ARM Cortex-M3 技術解析&#xff1a;核寄存器R1-R15介紹及使用 作為嵌入式開發領域的經典處理器內核&#xff0c;ARM Cortex-M3&#xff08;CM3&#xff09;憑借其高效能、低功耗和豐富特性&#xff0c;在工業控制、物聯網、消費電子等領域廣泛應用。而內核寄存器是我們調試代…

python unzip file

要在 Python 中解壓文件并顯示進度&#xff0c;我們需要在解壓過程中跟蹤文件的提取進度。由于 zipfile 模塊本身不直接支持進度顯示&#xff0c;我們可以通過手動計算并使用 tqdm 庫來顯示進度條。 安裝 tqdm 首先&#xff0c;確保你已經安裝了 tqdm 庫&#xff0c;用于顯示…

DeepSeek+Kimi生成高質量PPT

DeepSeek與Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用&#xff1a;生成結構化PPT大綱&#xff08;擅長邏輯構建與內容優化&#xff09;Kimi核心作用&#xff1a;將文本轉換為視覺化PPT&#xff08;提供模板庫與排版引擎&#xff09; 二、操作步驟詳解 1. 通…

一文掌握python中正則表達式的各種使用

文章目錄 1. 正則表達式基礎1.1 常用元字符1.2 基本用法 2. 正則表達式高級功能2.1 分組捕獲2.2 命名分組2.3 非貪婪匹配2.4 零寬斷言2.5 編譯正則表達式2.6 轉義字符 3. 常見應用場景3.1 驗證郵箱格式3.2 提取 URL3.3 提取日期3.4 提取HTML中的鏈接3.5 提取HTML中的圖片鏈接3.…

TCP,http,WebSocket

TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;和HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;都是網絡通信中的重要協議&#xff0c;但它們在網絡協議棧的不同層次上工作&#xff0c;各自負責不同…

Redis|持久化

文章目錄 總體介紹RDB&#xff08;Redis DataBase&#xff09;官網介紹案例演示優勢劣勢如何檢查修復 dump.rdb 文件哪些情況下會觸發 RDB 快照如何禁用快照RDB 優化配置項詳解小總結 AOF&#xff08;Append Only File&#xff09;官網介紹是什么能干嘛AOF 持久化工作流程AOF 緩…

Docker小游戲 | 使用Docker部署star-battle太空飛船射擊小游戲

Docker小游戲 | 使用Docker部署star-battle太空飛船射擊小游戲 前言項目介紹項目簡介項目預覽二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署star-battle網頁小游戲下載鏡像創建容器檢查容器狀態檢查服務端口安全設置四、訪問star-battle網頁小游戲五、總…

巨控科技的GRM550元出魔抗實現PLC遠程下載與維護方案:工業自動化的高效解決方案

巨控科技PLC遠程下載與維護方案&#xff1a;工業自動化的高效解決方案 在工業自動化領域&#xff0c;設備的高效維護與快速調試是保障生產連續性的關鍵。巨控科技推出的PLC遠程下載與維護方案&#xff0c;憑借其先進的技術和廣泛兼容性&#xff0c;成為企業實現設備遠程管理的…

ChatGLM2-6B如何從輸入到輸出-代碼解析(二)

出發點 上一篇解析了Chatglm2-6b的模型架構&#xff0c;并和Chatglm-6b進行對比&#xff0c;但是留下了幾個問題&#xff08;哭&#xff09;這一篇的目的是講明白attention和rotaryEmbedding&#xff0c;解決問題&#xff0c;并實現整體目標&#xff0c;完全替代modeling_chat…

Sublime Text4安裝、漢化

-------------2025-02-22可用---------------------- 官方網址下載&#xff1a;https://www.sublimetext.com 打開https://hexed.it 點擊打開文件找到軟件安裝目錄下的 ctrlf 查找 8079 0500 0f94 c2右邊啟用替換替換為:c641 0501 b200 90點擊替換按鈕 替換完成后 另存為本地…

汽車開放系統架構(AUTOSAR)中運行時環境(RTE)生成過程剖析

一、引言 在當今高度智能化的汽車電子領域&#xff0c;軟件系統的復雜性呈指數級增長。為了應對這一挑戰&#xff0c;汽車開放系統架構&#xff08;AUTOSAR&#xff09;應運而生&#xff0c;它為汽車電子軟件開發提供了標準化的分層架構和開發方法。其中&#xff0c;運行時環境…

基于MATLAB的OFDM通信系統仿真設計

下面將為你詳細介紹基于MATLAB的OFDM通信系統仿真設計的步驟和示例代碼。 1. OFDM系統原理概述 正交頻分復用&#xff08;OFDM&#xff09;是一種多載波調制技術&#xff0c;它將高速數據流通過串并轉換&#xff0c;分配到多個正交的子載波上進行傳輸&#xff0c;這樣可以有效…

stm32仿真 74hc238流水燈 數碼管動態數字顯示

f103c6t6a_hex文件 #include "main.h"![請添加圖片描述](https://i-blog.csdnimg.cn/direct/8c0d44b121134cf08f5186df316ea07f.gif)#include "stdlib.h"void SystemClock_Config(void); static void MX_GPIO_Init(void); // 自定義abc引腳 #define A_PIN…

結構型模式 - 代理模式 (Proxy Pattern)

結構型模式 - 代理模式 (Proxy Pattern) 代理模式是一種結構型設計模式&#xff0c;它允許通過代理對象來控制對另一個對象&#xff08;目標對象&#xff09;的訪問。代理對象充當目標對象的接口&#xff0c;客戶端通過代理對象間接訪問目標對象。 分為兩大類 靜態代理&#…

網絡層(IP)

基本概念 子網和局域網是一個概念主機: 配有 IP 地址, 也能進行路由控制的設備;路由器: 即配有 IP 地址, 又能進行路由控制;節點&#xff1a; 路由器和主機的統稱。 背景 兩主機并不是直接連接的&#xff0c;路徑選擇問題&#xff1f;為什么&#xff1f; 由網絡層&#xff08…

JMeter性能問題

性能測試中TPS上不去的幾種原因 性能測試中TPS上不去的幾種原因_tps一直上不去-CSDN博客 網絡帶寬 連接池 垃圾回收機制 壓測腳本 通信連接機制 數據庫配置 硬件資源 壓測機 業務邏輯 系統架構 CPU過高什么原因 性能問題分析-CPU偏高 - 西瓜汁拌面 - 博客園 US C…

創建型模式 - 建造者模式 (Builder Pattern)

創建型模式 - 建造者模式 (Builder Pattern) 建造者模式是一種創建型設計模式&#xff0c;它將一個復雜對象的構建與表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 需求描述 在游戲開發中&#xff0c;創建一個復雜的游戲角色&#xff0c;角色具有多種屬性&…

代碼隨想錄第二十天|二叉樹part08--669.修建二叉搜索樹、108.將有序數組轉換為二叉搜索樹、538.把二叉搜索樹轉換為累加樹

刷題小記&#xff1a; 上期學習了二叉搜索樹的插入和刪除操作&#xff0c;這次學習如何按區間修剪二叉搜索樹。還有兩題&#xff0c;關于借助二叉搜索樹的有序特性進行轉換。 669.修剪二叉搜索樹&#xff08;669.修剪二叉搜索樹&#xff09; 題目分析&#xff1a; 給定一個…

Fisher信息矩陣(Fisher Information Matrix,簡稱FIM)

Fisher信息矩陣簡介 Fisher信息矩陣&#xff08;Fisher Information Matrix&#xff0c;簡稱FIM&#xff09;是統計學和信息理論中的一個重要概念&#xff0c;廣泛應用于參數估計、統計推斷和機器學習領域。它以統計學家羅納德費希爾&#xff08;Ronald Fisher&#xff09;的名…