搜索与图论-------DFS与BFS与拓扑排序

一.深度优先搜索(基于栈)

适用:

既可以在无向图中也可以在有向图

思路:

从根节点出发,每次遍历他的第一个孩子节点直到遍历到叶子节点,再退回到他的父亲节点,接着遍历父亲节点的其他孩子节点,如此重复,直到遍历完所有的节点。

核心代码:

int dfs(int u)

{

    st[u] = true; // st[u] 表示点u已经被遍历过

    for (int i = h[u]; i != -1; i = ne[i])

    {

        int j = e[i];

        if (!st[j]) 

        dfs(j);

    }

}

二.宽度优先遍历(基于队列)

适用:

既可以在无向图中也可以在有向图

思路:

从根节点开始,按由近及远的顺序一层一层的遍历,直到遍历完所有节点。

核心代码:

queue q;
st[1] = true; // 表示1号点已经被遍历过
q.push(1);

while (q.size())
{
    int t = q.front();
    q.pop();

    for (int i = h[t]; i != -1; i = ne[i])
    

你可能感兴趣的:(图论,深度优先,宽度优先)