图的遍历(动图)

深度优先遍历(DFS)

动图

深度优先遍历DFS动图

伪代码

递归

visited[0...V-1] = false;
for (int v = 0; v < G.V(); v++)
    if (!visited[v]) {
        dfs(v);
    }
dfs(int v) {
    visited[v] = true;
    for (int w : G.adj(v))
        if (!visited[w])
            dfs(w);
}

非递归

visited[0...V-1] = false;
for (int v = 0; v < G.V(); v++)
    if (!visited[v]) {
        dfs(v);
    }
dfs(int s) {
    stack.add(s);
    visited[s] = true;
    whilie (stack.isEmpty()) {
        int v = stack.remove();
	    for (int w : G.adj(v))
	        if (!visited[w]) {
	            stack.add(w);
	            visited[w] = true;
	        }
	    }
	}
}

dfs非递归分析动图(栈)

dfs非递归分析动图(栈)

广度优先遍历(BFS)

动图

广度优先遍历BFS动图

伪代码

visited[0...V-1] = false;
for (int v = 0; v < G.V(); v++)
    if (!visited[v]) {
        dfs(v);
    }
dfs(int s) {
    queue.add(s);
    visited[s] = true;
    whilie (queue.isEmpty()) {
        int v = queue.remove();
	    for (int w : G.adj(v))
	        if (!visited[w]) {
	            queue.add(w);
	            visited[w] = true;
	        }
	    }
	}
}

bfs分析动图(队列)

bfs分析动图(队列))

深度优先遍历和广度优先内在联系(遍历代码比较)

如下图,可以看出广度优先遍历和深度优先遍历在代码上基本是一致的,只是使用的数据结构不同
非递归代码比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值