圖論使我們能夠研究和視覺化物件或實體之間的關係。在目前的電腦科學技術中,圖遍歷在探索和分析不同類型的資料結構中起著至關重要的作用。在圖上執行的關鍵操作之一是遍歷 - 遵循特定路徑訪問所有頂點或節點。基於深度優先方法的 DFS 遍歷允許我們在回溯和探索其他分支之前探索圖的深度。在本文中,我們將使用 C 語言的鄰接矩陣表示來實作 DFS 遍歷。
圖由兩個主要元件組成,即表示實體或元素的頂點或節點,以及連接這些頂點的邊,描述它們之間的關係。
表示加權或未加權圖中頂點之間關係的唯一方法是透過鄰接矩陣。它通常採用方陣的形式,其中行表示源頂點,列表示目標頂點,每個單元包含有關對應對之間的邊存在或權重的資訊。
輸入是使用圖形的四個頂點透過一組特定元素給出的。輸入是:
1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1
設圖的起始頂點為 2。圖將從頂點「2」開始遍歷。頂點「2」的相鄰頂點顯然是1和3。由於起始頂點是2,因此在遍歷過程中不能再次存取它。頂點3在頂點2之後被訪問,那麼我們需要查看頂點3的鄰接頂點1和2。頂點1和頂點2已經被訪問過,遍歷停止。
輸入是用某些數字定義的,並使用 for 迴圈它將迭代鄰接矩陣並傳回 DFS 遍歷。
第1 步:程式首先定義一個常數「MAX」來表示給定圖中的最大節點數,並初始化一個名為「visited」的陣列來追蹤特定節點是否存在遍歷期間已被訪問過。
第 2 步:“dfs()”函數將一個方形鄰接矩陣作為參數,“adjMatrix”代表我們的圖,頂點總數為“vCount”,起始頂點為`開始`。此函數對給定圖執行遞歸深度優先搜尋遍歷。
第3 步:在“dfs()”函數中,我們使用基於布林值的“visited[]”數組中的索引將每個當前處理的頂點標記為“已訪問” ,並相應地列印其值。
第 4 步:「dfs()」內部的循環遞歸地迭代當前節點的所有未訪問的鄰居,直到不可能獲得與其連接的頂點。
第5步:在main()中,我們使用巢狀循環讀取使用者的輸入,例如「vCount」的頂點數量及其對應的連接到鄰接矩陣。
第 6 步:然後,我們提示使用者輸入所需的起始頂點,然後將「visited[]」陣列的每個元素初始化為零(因為尚未存取任何節點)。
第7步:最後,程式使用適當的參數呼叫「dfs()」函數來啟動深度優先搜尋遍歷,並列印出DFS遍歷路徑。
//Including the required header files #include<stdio.h> #define MAX 100 int visited[MAX]; //dfs function is defined with three arguments void dfs(int adjMatrix[][MAX], int vCount, int start) { visited[start] = 1; printf("%d ", start); for(int i=0; i<vCount; i++) { if(adjMatrix[start][i] && !visited[i]) { dfs(adjMatrix,vCount,i); } } } //main function is used to implement the above functions int main() { int adjMatrix[MAX][MAX]; int vCount; // Assigning the variable with value of 4 vCount = 4; // Assigning the adjacency matrix directly same the example given above adjMatrix[0][0] = 1; adjMatrix[0][1] = 0; adjMatrix[0][2] = 0; adjMatrix[0][3] = 1; adjMatrix[1][0] = 0; adjMatrix[1][1] = 1; adjMatrix[1][2] = 1; adjMatrix[1][3] = 0; adjMatrix[2][0] = 0; adjMatrix[2][1] = 1; adjMatrix[2][2] = 1; adjMatrix[2][3] = 0; adjMatrix[3][0] = 1; adjMatrix[3][1] = 0; adjMatrix[3][2] = 0; adjMatrix[3][3] = 1; //Declaring the start variable as integer data type and later assigned with a value of 2 int start; // Assigning the starting vertex directly start = 2; for(int i = 0; i < MAX; ++i) { visited[i] = 0; } printf("\nDFS Traversal: "); dfs(adjMatrix, vCount, start); return 0; }
DFS Traversal: 2 1
透過使用鄰接矩陣作為圖的表示,我們可以在大型或複雜的資料集上有效地執行 DFS。在本文中,我們詳細解釋了這一點,並提出了一個使用基於鄰接矩陣的表示來實現深度優先搜尋遍歷的 C 程式。深度優先搜尋是一種用於探索和分析圖結構的強大演算法。
以上是給定一個圖,使用鄰接矩陣實現深度優先搜尋(DFS)遍歷的C程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!