图的深度优先搜索正如其名"深度优先",算法从一个点开始遍历,只要还有可能就尽量的"深入"遍历.
第一个节点是v,深度优先搜索总是对最近"发现"的节点的出发边进行探索,直到当前节点的所有出发边已经探索完成,则算法"回朔"到该节点的父节点,去探索父节点的其他出发边.该过程会一直持续到由v发出的边的所有边都探索完成,如果该图中还有为发现的节点,则从剩下的未发现的节点中选取一个节点开始深度优先算法的运行,重复同样的上述工作.这样直至图中的所有节点都被发现,则深度优先搜索完成.
拓扑排序可以借助与深度优先搜索,每个节点有一个发现时间discover_time,(是第一次探索到该节点)和一个完成时间finish_time(该节点的所有边探索完成时间),而拓扑排序是深度优先搜索的每个节点按其完成时间依次从左到右排序,即为拓扑排序.