图的DFS与BFS用好,能解决leetcode 25%的题目
DFS是一次走到底,(如果不用递归)所以要用stack保留之前信息(可理解成树的先序遍历),BFS每次只走一步,新添加的待遍历点放入queue,等之后再遍历。
其实我有一篇关于DFS和BFS很好的教材,不过是全英版的。链接戳这里~
根据数据结构(C语言版)清华大学出版社:
DFS:
对于每个节点的相邻节点都是用DFS,一条路走到黑。
Boolean visited[MAX]; //记录某个节点是否被访问过
Status(*VisitFunc)(int v); //函数变量
void DFSTraverse(Graph G, Status(*Visit)(int v)) {
VisitFunc = Visit; //使用全局变量VisitFunc 使DFS不必设函数指针参数
for(v = 0; v < G.vexnum; ++v