DFS
算法原理:
选择一个起始点V作为当前节点
1、访问当前节点,并标注为已访问,到下一步
2、如果存在和当前节点相邻并且还没有被访问的节点U,则将U设为当前节点,返回上一步
3、如果当前节点没有未被访问的相邻节点,则回溯,回退到上一个当前节点
上面所说的当前节点用栈来维护,每次访问到的节点入栈,回溯的时候出栈
伪代码:
DFS(V)
visited[v] = true;
dosomething(v);
for u in adjecnt_list[v]
if visited[u] == false
DFS(u)
BFS
选择一个起点v放入先进先出队列中
1、如果队列不为空,弹出队列首元素作为当前节点,执行下一步;如果队列为空,则算法结束
2、将与当前节点相邻且未被访问的所有节点信息更新,并全部放入队列,继续执行上一步
伪代码:
BFS(v):
resetArray(visited,false);
visted[v] = true;
queue.push(v);
while(!queue.isEmpty()){
v = queue.poll();
for u in adjecent_list[v]:
if(visited[u] == false)
dosomething(u);
queue.push(u);
}