数据结构-图

一、图的存储结构

在这里插入图片描述
在这里插入图片描述

1.1 邻接矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 邻接表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 十字链表

在这里插入图片描述

二、广度优先搜索树( BFS)

2.1 定义

在这里插入图片描述

2.2 C实现

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

伪码:

把start节点push入队列;

        while(队列不为空) {

            把队列首节点pop出队列;

            对节点进行相关处理或者判断;

            while(此节点有下一个相关节点){

                把相关节点push入对列;

            }

        }
q.push(head);
while(!q.empty())
{
	temp=q.front();
	q.pop();
	if(tempÎ为目标状态)
		输出或记录
	if(temp不合法 )
		continue;
	if(temp合法)
		q.push(temp+¦Δ ); 
}

2.3 性能分析

在这里插入图片描述

2.4 BFS算法应用

在这里插入图片描述

2.5 广度优先生成树

在这里插入图片描述

三、深度优先搜索树( DFS)

3.1 定义

  • DFS(深度优先遍历) 以及 BFS(广度优先遍历)

  • BFS和DFS算法原理(通俗易懂版)
    概念:
    顾名思义,这种遍历方法是以深度为优先进行对图的搜索或者遍历,至于什么是以深度为优先条件,先看下面DFS的基本步骤:

    ( 这是一个递归思想的DFS)

    DFS:从当前节点开始,先标记当前节点,再寻找与当前节点相邻,且未标记过的节点:

    (1): 当前节点不存在下一个节点,则返回前一个节点进行DFS

    (2): 当前节点存在下一个节点,则从下一个节点进行DFS
    在这里插入图片描述

3.1 C实现

在这里插入图片描述
在这里插入图片描述
伪码:

  find(节点){
 
            if(此结点已经遍历 || 此节点在图外 || 节点不满足要求) return;
 
            if(找到了end节点) 输出结果 ; return;
 
            标记此节点,表示已经遍历过了;
 
            while(存在下一个相邻节点) find(下一个节点);
 
        }
void dfs(状态A)
{
	if(A不合法)
		return;
	if(A为目标状态)
		输出或记录路径
	if(A不为目标状态)
		dfs(A+Δ ) 
 } 

3.3 性能分析

在这里插入图片描述

3.4 深度优先生成树

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值