目录

图算法二之深度优先搜索

目录

图算法二之深度优先搜索

前面我们已经介绍了广度优先算法,我们这一张介绍深度优先,深度优先不同于广度优先在于,广度优先算法是一层一层的搜索,即搜索一个节点,然后搜索它所有的字节点,而深度优先搜索则是,搜索一个节点后,先搜索其一个节点,然后深度搜索,搜索完了以后,再搜索这个节点的其他兄弟节点。

相比于广度优先算法,我们将bfs中的队列改为栈,采用同样的数据结构,实现代码如下

void dfs(graph *g,int start)
{
    edgenode *p;
    stack<int> q;
    q.push(start);
    discovered[start]=true;
    while(!q.empty())
    {
        int x=q.top();
        q.pop();
        p=g->nodes[x];
        if(!processed[x])
        {
            cout<<x<<" ";
            processed[x]=true;
        }
        while(p)
        {
            int y=p->y;
            if(!processed[y]&&!discovered[y])
            {
                parent[y]=x;
                q.push(y);
                discovered[y]=true;
            }
            p=p->next;
        }
        
    }
}