圖的倆種遍歷方式(DFS,BFS)C++代碼實現

DFS,BFS

代碼顯示爲輸出連通集

算法時間複雜度:

採用鄰接表存儲圖:DFS和BFS都爲O(N+E)
採用鄰接矩陣存儲:DFS和BFS都爲O(N^2);

數據結構設計

/// @brief 頂點
/// @param adjacencyList 鄰接表
struct vertex
{
    int id;
    vector<int> adjacencyList;
};

vector<bool> visited(N,false);
vector<vertex> vertexList(N);

DFS

void dfs(int s,vector<bool>&visited,vector<int>&path,vector<vertex>vertexList)
{
    vector<int> v = vertexList[s].adjacencyList;
    for (int i=0; i<v.size(); ++i)
     {
        if(visited[v[i]]==false)
        {
            path.push_back(v[i]);
            visited[v[i]] = true;
            dfs(v[i], visited, path, vertexList);
        }
    }
}

BFS

void bfs(int s,vector<bool>&visited,vector<int>&path,vector<vertex>vertexList)
{
    queue<int>q;
    q.push(s);
    while (!q.empty()) 
    {
        int cur = q.front();
        q.pop();
        vector<int> v = vertexList[cur].adjacencyList;
        for (int i=0; i<v.size(); ++i) 
        {
            if(visited[v[i]]==false)
            {
                path.push_back(v[i]);
                visited[v[i]] = true;
                q.push(v[i]);
            }
        }
    }
}
發佈了149 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章