搜尋
首頁Javajava教程檢查根據給定條件從數組建立的圖是否包含循環

檢查根據給定條件從數組建立的圖是否包含循環

Aug 31, 2023 pm 06:57 PM
檢查循環(check cycle)數組建構(array construction)給定條件(given conditions)

簡介

在圖論中,弄清楚由陣列建立並滿足某些條件的圖是否有環是一項非常重要的任務。圖表是一種顯示事物如何連結在一起的想像方式。它被用在很多地方,例如電腦網路和社交網路。本文討論了圖構造的條件、BFS 和 DFS 演算法,並逐步指導如何識別無向圖中的循環。

圖的陣列表示

圖論中基於數組的方法將頂點和邊存儲在數組中,這使得它們易於在演算法中使用和使用。從空圖開始,根據數組中的信息一次添加一個頂點和邊,這是進一步探索的基礎,例如循環檢測,這對於理解圖如何連結以及是否存在循環非常重要。

圖建置條件

給定條件的解釋

  • 圖是由陣列建構的,其中陣列表示一組頂點及其連接或邊。

  • 陣列的每個元素對應圖中的一個頂點

  • #陣列中每個元素的值表示它所連接的頂點(其相鄰頂點)的索引。

  • 陣列的索引代表頂點本身,其對應的值代表它所連接的頂點。

驗證圖建構的條件

  • 在建立圖表之前檢查陣列是否有效並滿足所需條件。

  • 確保陣列不為空並且至少包含一個元素來建立頂點。

  • 驗證陣列是否只包含非負整數,因為負值或無效資料無法表示有效的頂點或邊

  • 確保陣列索引在適當的範圍內。它們應該從 0 開始到 n-1,其中 n 是圖中的頂點總數。

  • 確認數組中的值(連接)也在0到n-1的有效範圍內,確保它們對應於現有的頂點

  • #檢查是否有重複連接或自循環,因為它們違反了有效圖表的條件

  • 驗證沒有遺失連接,這表示所有頂點都連接起來形成完整的圖或連接的元件

#DFS 和 BFS 演算法

  • 深度優先搜尋 (DFS) 用於探索圖的頂點和邊,方法是在轉身之前盡可能深入每個分支

虛擬程式碼

procedure DFS(graph, start_vertex, visited)
   if start_vertex is not in visited:
      mark start_vertex as visited
      process start_vertex (e.g., check for cycles)
      for each neighbor in graph[start_vertex]:
      if neighbor is not in visited:
      DFS(graph, neighbor, visited)
   end if
end procedure
    pocedure DFS_Traversal(graph)
    visited = empty set
      for each vertex in graph:
      if vertex is not in visited:
         DFS(graph, vertex, visited)
   end for
end procedure
  • 廣度優先搜尋 (BFS) 是一種圖遍歷演算法,一次一層地遍歷圖的所有頂點。這使得它成為在圖表中尋找週期的好方法

虛擬程式碼

procedure BFS(graph, start_vertex):
   create an empty queue Q
   create a set visited to keep track of visited vertices
   
   enqueue start_vertex into Q
   add start_vertex to visited set
   
   while Q is not empty:
      current_vertex = dequeue from Q
      for each neighbor_vertex of current_vertex:
         if neighbor_vertex is not in visited set:
            enqueue neighbor_vertex into Q
            add neighbor_vertex to visited set
      else:
         // A cycle is detected, return true
         return true
      // No cycle found, return false
      return false

複雜性

  • 時間複雜度

  • #BFS 和 DFS 的時間複雜度都是 O(V E),其中 V 是頂點數,E 是邊數。

  • 空間複雜度

  • #BFS 和 DFS 的時間複雜度為 O(V)。

逐步循環偵測過程

讓我們考慮一個帶有圖表的範例

檢查根據給定條件從數組建立的圖是否包含循環
  • 從一個空集合開始監視造訪過的頂點

#
Visited set: {}
  • 選擇任意頂點作為循環偵測過程的起點。我們選擇頂點 A。

Visited set: {A}
Current Vertex: A
  • 檢查目前頂點 (A) 的相鄰頂點。在本例中,A 的鄰居是 B 和 D。將它們新增至存取集中,並將 A 標識為其父節點

Visited set: {A, B, D}
Current Vertex: A
Parent of B: A
Parent of D: A
  • B 是存取集中的下一個存取頂點。

Visited set: {A, B, D}
Current Vertex: B
Parent of B: A
  • 探索 B 的周圍環境。 B 的直接鄰居是 A、C 和 E。 A 已經在存取頂點集合中,但它不是 B 的父節點,因此不構成環。

Visited set: {A, B, D, C, E}
Current Vertex: B
  • 繼續到下一個訪問的頂點,即 D。

Visited set: {A, B, D, C, E}
Current Vertex: D
Parent of D: A
  • 發現 D 的熟人。 A 和 E 是 D 的最近鄰居。由於 A 已經包含在存取集中且是 D 的父代,因此必須有一條邊 (D -> A) 將 D 連接到其父代。這表示該圖包含一個循環。

Cycle detected! There is an edge (D -> A) forming a cycle

過程到這裡就結束了,我們已經使用BFS成功偵測到了圖中的環路 即(A->B->E->D->A)。

結論

總之,對於許多應用程式來說,能夠在根據給定參數從陣列建立的圖中找到循環非常重要。無論您使用 DFS 還是 BFS,此過程都有助於找到可能的循環並解決涉及網路、電路和關係的現實問題。有效的循環檢測可以提高演算法的速度並確保數據正確。

以上是檢查根據給定條件從數組建立的圖是否包含循環的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具