数据结构—图

一、图的简介

• 在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。
• 顶点有时也被称为节点或者交点,边有时也称为链接。
• 边可以是单向的,也可以是双向的。

二、图的分类

  • 无向图:
    无向图是由顶点和边构成。

  • 有向图:
    有向图是由顶点和有向边构成。

  • 完全图:
    如果任意两个顶点之间都存在边叫完全图,有向的边叫有向完全图。如果无重复的边或者顶点到自身的边叫简单图。

三、图的表示

3.1 邻接矩阵

• 使用一个n×n的布尔值矩阵来表示任意两个节点之间是否有直接相连的边
• 对无向图来说,其邻接矩阵是一个对称矩阵
• 当图中边数E很稀疏时,邻接矩阵会浪费大量的空间
• 需要的空间为O(|V|2)
在这里插入图片描述

3.2 邻接表

• 存储每个节点出发边另一节点的下标
• 与邻接矩阵信息等价,存储空间更紧致
• 需要的空间为O(|V|+|E|)
在这里插入图片描述

四、图的遍历

4.1 广度优先搜索(Breadth-first Search, BFS)

	queue = {start_node}, initialize visited to all False
 	visited[start_node] = True
 	
 	while(!queue.empty()){
 		node = queue.front()
 		for neighbor_node in adj(node){ //遍历node的邻居
 			if(!visited[neighbor_node]){
 				visited[neighbor_node] = True
 				queue.push_back(neighbor_node)
 				//do something here
 			}
 		}
	}

4.2 深度优先搜索(Depth-first Search, DFS)

	visited[node] = True
 	for neighbor_node in adj(node){ //遍历node的邻居
 		if(!visited[neighbor_node]){
 			//do something here
 			DFS(neighbor_node)
 		}
 	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值