【代码随想录】dfs和bfs (所有可能的路径、岛屿数量)

news/2024/7/15 18:26:29 标签: 深度优先, 算法, 图论

所有可能的路径:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

 

class Solution {
public:
    vector<int> path;
    vector<vector<int>> result;
    void dfs(vector<vector<int>> graph, int x){//1 确认递归函数和参数
        if (x == graph.size()-1) {//2 确认终止条件
            result.push_back(path);
            return;
        }

        for (int i = 0; i < graph[x].size(); i++) {//3 处理目前搜索节点出发的路径
            path.push_back(graph[x][i]);//把当前节点压入
            dfs(graph, graph[x][i]);//递归
            path.pop_back();//回溯
        }
    }

    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
        path.push_back(0);//初始节点0要加入
        dfs(graph, 0);//从初始节点开始递归
        return result;
    }
};

bfs:

用队列实现:

岛屿数量

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

dfs:

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    int dir[4][2] = {1,0, 0,1, -1,0, 0,-1};
    void dfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) {
        for (int i = 0; i < 4; i++) {
            int newX = x + dir[i][0];
            int newY = y + dir[i][1];
            if (newX < 0 || newX >= grid.size() || newY < 0 || newY >= grid[0].size()) continue;
            if (!visited[newX][newY] && grid[newX][newY] == '1') {
                visited[newX][newY] = true;
                dfs(grid, visited, newX, newY);
            }
        }
    }

    int solve(vector<vector<char> >& grid) {
        // write code here
        vector<vector<bool>> visited(grid.size(), vector<bool> (grid[0].size(), false));
        int count = 0;
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[0].size(); j++) {
                if (!visited[i][j] && grid[i][j] == '1') {
                    count++;
                    visited[i][j] = true;
                    dfs(grid, visited, i, j);
                }
            }
        }
        return count;
    }
};

bfs:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    int dir[4][2] = {1,0, 0,1, -1,0, 0,-1};
    void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x,int y) {
        queue<pair<int, int>> que;
        que.push(pair(x, y));
        visited[x][y] = true;
        while (!que.empty()) {
            int curX = que.front().first;
            int curY = que.front().second;
            que.pop();
            for(int i = 0; i < 4; i++) {
                int newX = curX + dir[i][0];
                int newY = curY + dir[i][1];
                if (newX < 0 || newX >= grid.size() || newY < 0 || newY >= grid[0].size()) continue;
                if (!visited[newX][newY] && grid[newX][newY] == '1') {
                    que.push(pair(newX, newY));
                    visited[newX][newY] = true;
                }
            }
        }
    }

    int solve(vector<vector<char> >& grid) {
        // write code here
        vector<vector<bool>> visited(grid.size(), vector<bool> (grid[0].size(), false));
        int count = 0;
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[0].size(); j++) {
                if (!visited[i][j] && grid[i][j] == '1') {
                    count++;
                    bfs(grid, visited, i, j);
                }
            }
        }
        return count;

    }
};


http://www.niftyadmin.cn/n/5008075.html

相关文章

【C++】平衡二叉搜索树的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

入行测试一年半的心得体会

成为xx一员测试已经有1年半了&#xff0c;一直没有真正坐下来花些时间将自己的思路理清一下。刚好近期公司落地了OKR&#xff0c;给自己制定了OKR之后思路终于开始清晰起来&#xff0c;朦朦胧胧地开始看清了远方的路&#xff0c;麻着胆子分析一下自己&#xff0c;毕竟摸黑走路的…

3dsMax软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 3dsMax是一款由Autodesk公司开发的著名的三维计算机图形软件&#xff0c;广泛应用于动画、游戏、建筑和产品设计等领域。它以强大的建模、动画、渲染和特效功能而闻名&#xff0c;为用户提供了一个完整的制作流程&#xff0c;从…

YOLOv5改进算法之添加CA注意力机制模块

目录 1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动 1.CA注意力机制 CA&#xff08;Coordinate Attention&#xff09;注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息&#xff0c;以便模型可以更好地…

ubuntu22.04在线安装MySQL8

ubuntu22.04在线安装MySQL8 wget https://repo.mysql.com//mysql-apt-config_0.8.25-1_all.deb#输入这条命令&#xff0c;然后选择OK sudo dpkg -i mysql-apt-config_0.8.25-1_all.debapt update #安装 apt-get -y install mysql-server#输入密码&#xff0c;两次 #然后选择第…

Java虚拟机反射机制和动态代理

Java虚拟机反射机制运行时获取和操作&#xff08;类、方法、字段&#xff09;等对象的信息。下面是反射机制的基本使用示例&#xff0c;包括&#xff08;获取类信息、创建对象、调用方法和访问字段&#xff09;等操作。 获取类信息&#xff1a; 使用反射可以获取类的信息&#…

028:vue上传解析excel文件,列表中输出内容

第028个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

Kubernetes(k8s)部署高可用多主多从的Redis集群

Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建&#xff08;推荐&#xff09; 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…