今天我们聊一下深度优先搜索(DFS)。
DFS的作用很简单,就是遍历图(把图中每一个结点都访问一遍)。
接下来我们拿一个例子来说明DFS:
这里有一个迷宫,迷宫的拐点有灯泡,现在你需要把它们全部点亮。此时你选则第一盏灯亮它(如图(1)。
(1)
接下来你会看到还有三盏灯没有被点亮,你随机选择一盏灯点亮它(如图2),
(2)
就这样周而复始的进行,但是要注意走不通的路要原路返回例如图(3)。当点亮第二排第一盏灯时,发现已经没有可以点亮的灯了,这时候要原路返回。当点亮某灯泡时,发现可以直接回到起始点,这个时候不可直接原路返回,因为你不确定是否每一盏灯都被点亮了。所以这要原路返回。
(3)
到这里我们深度优先搜索的大概思路就将完了。
接下来让我们看看核心代码吧!
里我们是用邻接矩阵的方式来存图。
void DFS(Vertex V,const MGraph GM){//如果是无向图,且用邻接矩阵表示图
visited[V]=1;//如果V被访问过则标记为1
for(Vertex L=0;L<GM->Nv;L++){//Vertax为顶点类型,GM->Nv为顶点个数
if(GM->G[V][L]!=1&&!visited[L]){
DFS(L,GM);
}
}
}
此代码基于C语言实现!