1. 程式人生 > 其它 >C語言資料結構_圖的遍歷-廣度優先搜尋

C語言資料結構_圖的遍歷-廣度優先搜尋

//廣度優先搜尋一個連通圖
void BFS(VNode G[], int v){
    int w;
    visit(v);       //訪問頂點v
    visit[v] = 1;       //將頂點v對應的訪問標記置1
    EnQueue(q, v);      //頂點v入佇列
    while(!emptyQ(q)){
        DeQueue(&q, &v);        //出佇列,元素由v返回
        w = FirstAdj(G, v);     //找到頂點v的第一個鄰接點,如果無鄰接點,返回-1
        while( w != -1){
            if(visited[w] == 0){
                visit(w);
                EnQueue(q, w);      //頂點w入佇列
                visited[w] = 1;
            }
        w = NextAdj(G, v);      //找到頂點v的下一個鄰接點,如果無鄰接點,返回-1
        }
    }
}

//對圖G=(V,E)進行廣度優先搜尋的主演算法
void Travel_BFS(VNode G[], int visited[], int n){
    int i;
    for(i=0; i<n; i++)
        visited[i] = 0;         //將標記陣列初始化為0
    for(i=0; i<n; i++)
        if(visited[i] == 0)     //若有頂點未被訪問,從該頂點開始繼續廣度優先搜尋
        BFS(G, i);
}