图论---图的遍历

在图论中,图的遍历一般有两种,分别为DFS(深度优先遍历)、BFS(广度优先遍历),以下是这两种遍历方式的模板:

DFS(深度优先搜索)

代码框架:

复制代码
void dfs(参数) {
    if (终止条件) {
        存放结果;
        return;
    }
​
    for (选择:本节点所连接的其他节点) {
        处理节点;
        dfs(图,选择的节点); 
        回溯,撤销处理结果
    }
}
void main_function(参数){
    for(遍历所有节点){
        if(节点未遍历){
            dfs(该节点)
        }
    }
}

BFS(广度优先搜索)

代码框架:

复制代码
int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 表示四个方向
void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) {
    int m = grid.size(),n = grid[0].size();
    queue<pair<int, int>> que; // 定义队列
    que.push({x, y}); // 起始节点加入队列
    visited[x][y] = true; // 只要加入队列,立刻标记为访问过的节点
    while(!que.empty()) { // 开始遍历队列里的元素
        auto cur = que.front(); // 从队列取元素
        que.pop(); 
        int x = cur.first;
        int y = cur.second; // 当前节点坐标
        for (int i = 0; i < 4; i++) { // 开始想当前节点的四个方向左右上下去遍历
            int tx = x + dir[i][0];
            int ty = y + dir[i][1]; // 获取周边四个方向的坐标
            if (tx >= 0 && tx < m && ty >= 0 && ty < n && !visited[tx][ty]) { // 如果节点没被访问过
                que.push({tx, ty});  // 队列添加该节点为下一轮要遍历的节点
                visited[tx][ty] = true; // 只要加入队列立刻标记,避免重复访问
            }
        }
    }
}
相关推荐
CodeJourney.2 小时前
DeepSeek在MATLAB上的部署与应用
数据库·人工智能·算法·架构
烟雨迷3 小时前
八大排序算法(C语言实现)
c语言·数据结构·学习·算法·排序算法
emmmmXxxy3 小时前
leetcode刷题-动态规划08
算法·leetcode·动态规划
tt5555555555553 小时前
每日一题——打家劫舍
c语言·数据结构·算法·leetcode
xing.yu.CTF4 小时前
Alice与Bob-素数分解密码学
算法·密码学
瓦力的狗腿子4 小时前
Starlink卫星动力学系统仿真建模第十讲-基于SMC和四元数的卫星姿态控制示例及Python实现
开发语言·python·算法
闻缺陷则喜何志丹4 小时前
【二分查找】P11201 [JOIG 2024] たくさんの数字 / Many Digits|普及
c++·算法·二分查找·洛谷·字符·数字·需要
shinelord明5 小时前
【再谈设计模式】访问者模式~操作对象结构的新视角
开发语言·数据结构·算法·设计模式·软件工程
y.Ghost5 小时前
数据结构与算法:均值滤波
c语言·图像处理·人工智能·算法·计算机视觉·均值算法·均值滤波
程序员南飞5 小时前
算法-数据结构-图-邻接表构建
java·数据结构·算法·职场和发展