一、DFS
关于深度优先搜索,主要一个关键词就是深。深是什么意思呢,比如说我们走一个迷宫时可以遵守一个规则,就是无论走到哪个岔路口,我们都优先选择靠近左手边的那条路。这是一条基本的概念,当然还有涉及到这条路是否曾经走过(在算法中可以设置一个标记位)。如果走到了死路,就原路返回到前一个岔路,走靠近左手边的第二个岔路,以此类推。
关于DFS怎么实现?我们可以用到递归的方法。比如说下面一个代码
void DFS(Graph G)
{
for(Gnode q=G->firsrm;q!=NULL;q=laterm(G,q))
{
DFS(q);
}
}
二、BFS
广度优先搜索的关键词在于“层”,意思说我们是一层一层的来访问,类似于树中的层次遍历。在实现这一过程中需要用到队列(queue)类似于下面的伪代码
void BFS(Graph G)
{
queue <int> q;
new Gnode p;
p=G;
q.push(p)
while (!IsEmptyQ(q))
{
//将结点出入队,访问,放入结点
}
}