图的俩种遍历方式

来源:互联网 发布:白金数据 东野圭吾 编辑:程序博客网 时间:2024/06/10 14:05

代码为输出连通集
时间复杂度:
采用邻接表存储图:DFS和BFS都为O(N+E)
采用邻接矩阵存储:DFS和BFS都为O(N^2);
设有数据结构

struct vertex{    int id;    vector<int> adjacencyList;//邻接表};//每个顶点.

设有数组

vector<bool>visited(N,false);//N为顶点 vector<vertex>vertexList(N);

则有以下遍历方式

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);        }    }}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]);            }        }    }}
0 0
原创粉丝点击