06-圖1 列出連通集

廣度優(yōu)先搜索與深度優(yōu)先搜索

廣度優(yōu)先搜索

此處舉一個特例,用

#include "0_.h"
void BFS(MGraph G)
{
    int v, w, i;
    Queue Q;
    for (i = 0; i < MaxVertexNum; i++) {
        Visited[i] = 0;
    }
    Q = CreatQueue();
    for (i = 0; i < G->nv; i++) {
        if (Visited[i] == 0) {
            printf("{ ");
            Visited[i] = 1;
            printf("%d ", i);
            EnQueue(Q, i);
            while (!IsEmptyQ(Q)) {
                v = DeQueue(Q);
                /*********************************/
                for (w = 0; w < G->nv; w++) {
                    if (!Visited[w] && G->Edge[v][w]) {
                        Visited[w] = 1;
                        printf("%d ", w);
                        EnQueue(Q, w);
                    }
                }
                /*********************************/
            }
            printf("}");
            if (!FinishVisit(G))
                printf("\n");
        }
    }
    return;
}

注釋包裹處可替換為下列代碼的思路,更具有一般性

w = 0;
/* v為給定的第一個點(diǎn),先找到v的鄰接點(diǎn),將其入隊(duì) */
for (w = FirstAdjV(G, v, w); w < G->nv; w = NextAdjV(G, v, w)) {
    if (!Visited[w]) {
        Visited[w] = 1;
        printf("%d ", w);
        EnQueue(Q, w);
    } else
        break;
}

Vertex FirstAdjV(MGraph G, Vertex v, Vertex w)
{
    int i;
    for (i = w; i < G->nv; i++) {
        if (!Visited[i] && G->Edge[v][i])
            break;
    }
    return i;
}

Vertex NextAdjV(MGraph G, Vertex v, Vertex w)
{
    return FirstAdjV(G, v, w);
}

深度優(yōu)先搜索

for (i = 0; i < G->nv; i++) {
    if (!Visited[i]) {
        printf("{ ");
        DFS(G, i);
        printf("}\n");
    }
}

void DFS(MGraph G, Vertex v)
{
    int w;
    printf("%d ", v);
    Visited[v] = 1;
    for (w = 0; w < G->nv; w++) {
        if (!Visited[w] && G->Edge[v][w]) {
            DFS(G, w);
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容