图的深度优先搜索DFS(C++实现)

本文详细探讨了图的深度优先搜索(DFS)算法,并提供了使用C++编写的实现代码。通过DFS,我们可以遍历图的所有节点,找到路径或者检测环路。本文适合想要深入理解图论和C++编程的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


//深度优先搜索算法在搜素过程中对节点进行涂色来指明节点的状态。
//每个节点的初始颜色都是白色的,在节点被发现后变成灰色的,在其邻接链表被扫描完成后变为黑色的。
//该方法保证每个节点仅在一颗深度优先树中出现,因此,所有的深度优先树都是不相交的。 
//深度优先搜素的另一个性质:节点的发现时间和完成时间具有所谓的括号化的结构 
#include <iostream>
 #include <queue>
 #include <stack>
 #include <vector>
 #include <climits> 
 using namespace std;
 //这里dfs在每个节点上盖了一个时间戳,每个节点v有两个时间戳:
 //第一个时间戳v.d记录节点v第一次被发现的时间(图上灰色的时候),第二个时间戳v.f记录的是搜索完成对v的邻接链表的扫描时间(图上黑色的时候) 
 struct ListNode{
 	int val;
 	int color;//white=0,gray=1,black=2;
 	int d;//发现节点的时刻 
 	int f;//完成对节点处理的时刻 
 	vector<ListNode*> next;//存储所有的邻接节点 
 	ListNode* pre;
 	ListNode(int x):color(0),val(x),d(0),f(0),pre(NULL){
	 }
 }; 
void insert(ListNode* L,ListNode* n)
{
	L->next.push_back(n);
}
void show(ListNode* L)//显示该节点的所有邻接节点 
{
	int n=L->next.size();
	for(int i=0;i<n;i++)
	cout<<(L->next)[i]->val<<" ";
}
int time=0;//变量time是一个全局变量,用来计算时间戳
void dfs_visit(ListNode* a[],int n,ListNode
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值