图论——深度优先搜索

今天我们聊一下深度优先搜索(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语言实现!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值