1. 程式人生 > 其它 >JDK併發包API-Semaphore使用

JDK併發包API-Semaphore使用

一、圖的遍歷概念

定義:從已給的連通圖中某一頂點出發,沿著一些邊訪遍圖中所有的頂點,且使每一個頂點僅被訪問一次,就叫做圖的遍歷,他說圖的基本運算。

遍歷的實質:找每個頂點的鄰接點的過程。

特點:因為圖中是多對多,所有圖中有可能存在迴路,且圖的任一頂點都可能與其他頂點相通,在訪問完某個頂點之後可能沿著某些邊又回到了曾經訪問過的頂點。

避免重複訪問思路:設定輔助陣列visited[n],用來標記每個被訪問過的頂點。

初始狀態visited[i]為0,頂點被訪問可以修改為1,防止多重被訪問

二、圖的遍歷常用演算法

1.深度優先搜尋(Depth_First Search——DFS)

理解:選擇隨機一條路一直走到底,開始回退上一步,判斷還有其他的路嗎,如果有繼續走,直到否則繼續回退,直到回退到開始位置,判斷是否還有未遍歷的,如果沒有表示全部已經遍歷完畢。
選擇的開始不一樣,遍歷結果也不同。類似於樹的先根遍歷

(1)鄰接矩陣表示的無向圖深度遍歷實現:

void DFS(AMGraph G,int V) {            // 圖G為鄰接矩陣型別,v為起始頂點
    cout << v; visited[v] = true       // 訪問第v個頂點,修改輔助陣列表示已被訪問
    for(w=0;w<G.vexnum;w++) {          // 依次檢測鄰接矩陣v所在的行
        if((G.arcs[v][w] != 0) && (!visited[w]))
            DFS(G,w)
        // w是v的臨界點,如果w未訪問,則遞迴呼叫DFS
    }
}

 稀疏圖適合鄰接表上進行深度遍歷,
 稠密圖適合在鄰接矩陣上進行深度遍歷,

(2)非連通圖的遍歷:

通過連通分量 來判斷 是否還有還有  生成樹中的連通圖  未被遍歷

2.廣度優先搜尋(Breadth_First Search——BFS)