蓝桥杯备考——算法

一、排序

冒泡排序、选择排序、插入排序、 快速排序、归并排序、桶排序

 

二、枚举

三、二分查找与二分答案

四、搜索(DFS)

DFS(DFS基础、回溯、剪枝、记忆化)

1.DFS算法(深度优先搜索算法)

深度优先搜索( DFS )是一种用于遍历或搜索图或树的算法,它从起始节点开始,沿着一条路径一直深入直到无法继续为止,然后回溯到上一个节点继续探索。 DFS 使用来记录遍历的路径,它优先访问最近添加到栈的节点。

DFS 的主要优点是简单且易于实现,它不需要额外的数据结构来记录节点的访问情况,仅使用栈来存储遍历路径。然而, DFS 可能会陷入无限循环中,因为它不考虑节点是否已经访问过。

  对于一个连通图,深度优先搜索遍历的过程如下:

(1)从图中某个顶点v出发,访问v;

(2)找到刚访问过的顶点的第一个未被访问的邻接点,访问该顶点。 以该顶点为新顶点,重 复此步骤, 直至刚访问过的顶点没有未被访问的邻接点为止。

(3)返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点, 访问该顶点。

(4)重复步骤 (2) 和(3), 直至图中所有顶点都被访问过,搜索结束。 

677c768ab5eb8b76c9f1c64d779c35b6.png

顶点访问序列:v1 -> v2 -> v4 -> v8 -> v5 -> v3 -> v6 -> v7

DFS 使用来记录遍历的路径,它优先访问最近添加到栈的节点。

 显然, 深度优先搜索遍历连通图是一个递归的过程。 为了在遍历过程中便千区分顶点是否已

 被访问,需附设访问标志数组 visited[n] , 其初值为 "false", 一旦某个顶点被访问,则其相应的分

量置为 "true"。  

python语言:

# 图的DFS遍历
def dfs(graph, start, visited):
    # 访问当前节点
    print(start, end=' ')
    # 标记当前节点为已访问
    visited[start] = True
    # 遍历当前节点的邻居节点
    for neighbor in graph[start]:
        # 如果邻居节点未被访问,则继续深度优先搜索
        if not visited[neighbor]:
            dfs(graph, neighbor, visited)

# 图的邻接表表示
graph = {
    '1': ['2', '3'],
    '2': ['2', '4', '5'],
    '3': ['1', '6', '7'],
    '4': ['2','8'],
    '5': ['2','8'],
    '6': ['3','7'],
    '7': ['3','6'],
    '8': ['4','5']
}

# 标记节点是否已访问的列表
visited = {node: False for node in graph}

# 从节点A开始进行DFS遍历
print("DFS遍历结果:")
dfs(graph, '1', visited)

C++ / C语言:

算法1.深度优先搜索遍历连通图

// 1. 深度优先搜索遍历连通图
bool visited[MVNum];     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值