领接矩阵结构的图的遍历(广度和深度遍历)

最近在数据结构的学习中,学习到了图这一章节,在图中,有两个遍历的策略:一种是广度优先遍历,一种是深度优先遍历

先上运行结果吧

图的结构

 这里以D顶点为起始顶点

广度优先遍历        

首先我们介绍广度优先遍历,在介绍图的广度优先遍历之前,先回顾一下树的广度优先遍历,就是层序遍历。下面是树的层序遍历代码

void LevelOrder(BitTree t) {
	Linkqueue q;//声明一个链队列
	initQueue(q);//初始化一个链队列

	BitTree p;
	enqueue(q, t);//把根节点入队
	while (!isEmpty(q)) {//队列不空就循环
		dequeue(q, p);//队头结点出队
		visit(p);//访问出队结点
		if (p->lchild != NULL)
			enqueue(q, p->lchild);//左孩子入队
		if (p->rchild != NULL)
			enqueue(q, p->rchild);//右孩子入队
	}
}

使用队列,遍历到一个节点,就把对应的孩子结点入队,这样就可以一层一层的遍历出二叉树,根据树的结构,什么树都可以层次遍历出来。同样的,图的广度优先遍历和树一样,但是不同的是,树不存在回路,而图,特别是无向图,可能存在多的回路。如果不做特殊处理,那么按照树的遍历方式遍历图,会造成循环。

所以,我们还需要设置一个标记数组,记作visited,这个数组和图的顶点序列数组一致,数组的每一项都对应了一个顶点,设置bool值来反应,通过索引值可以比较方便判断顶点是否被遍历过。

bool visited[MAXSIZE];//全局

在开始之前,我们还需要两个函数,一个函数用来求x顶点的第一个和它直接连通的顶点一个函数用来求除开y顶点,和x顶点直接连通的

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值