c語言dfs算法怎么實(shí)現(xiàn)

小億
103
2023-12-01 10:51:44
欄目: 編程語言

C語言中實(shí)現(xiàn)深度優(yōu)先搜索(DFS)算法的一種常見方法是使用遞歸。下面是一個(gè)簡單的示例:

#include <stdio.h>

#define MAX_VERTICES 100

int graph[MAX_VERTICES][MAX_VERTICES]; // 圖的鄰接矩陣表示
int visited[MAX_VERTICES]; // 記錄頂點(diǎn)是否已訪問

// 深度優(yōu)先搜索函數(shù)
void dfs(int v, int n) {
    visited[v] = 1; // 標(biāo)記當(dāng)前頂點(diǎn)為已訪問
    printf("%d ", v); // 輸出當(dāng)前頂點(diǎn)

    // 遍歷鄰接矩陣中與當(dāng)前頂點(diǎn)相鄰的所有頂點(diǎn)
    for (int i = 0; i < n; i++) {
        if (graph[v][i] && !visited[i]) {
            dfs(i, n); // 遞歸搜索相鄰頂點(diǎn)
        }
    }
}

int main() {
    int n, m; // n為頂點(diǎn)數(shù),m為邊數(shù)
    scanf("%d %d", &n, &m);

    // 初始化鄰接矩陣和visited數(shù)組
    for (int i = 0; i < n; i++) {
        visited[i] = 0;
        for (int j = 0; j < n; j++) {
            graph[i][j] = 0;
        }
    }

    // 讀入邊的信息,并構(gòu)建鄰接矩陣
    for (int i = 0; i < m; i++) {
        int u, v; // 邊的兩個(gè)頂點(diǎn)
        scanf("%d %d", &u, &v);
        graph[u][v] = 1;
        graph[v][u] = 1; // 若圖為無向圖,還需設(shè)置對(duì)稱位置為1
    }

    // 從頂點(diǎn)0開始進(jìn)行深度優(yōu)先搜索
    dfs(0, n);

    return 0;
}

上述代碼中,首先定義了一個(gè)鄰接矩陣graph用于表示圖的連接關(guān)系,以及一個(gè)visited數(shù)組用于記錄頂點(diǎn)是否已訪問。dfs函數(shù)是深度優(yōu)先搜索的核心函數(shù),它會(huì)遞歸地搜索與當(dāng)前頂點(diǎn)相鄰的未訪問頂點(diǎn),并標(biāo)記已訪問的頂點(diǎn)。

main函數(shù)中,首先讀入頂點(diǎn)數(shù)和邊數(shù),并初始化鄰接矩陣和visited數(shù)組。然后根據(jù)輸入的邊的信息,構(gòu)建鄰接矩陣。最后,從頂點(diǎn)0開始進(jìn)行深度優(yōu)先搜索。

以上是一個(gè)簡單的深度優(yōu)先搜索算法的實(shí)現(xiàn),你可以根據(jù)具體的需求進(jìn)行修改和擴(kuò)展。

0