图的俩种遍历方式(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]);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值