图论第一天

在单位摸鱼,地铁上看了个开始,图论开了个头,后面也希望能往这个方向上转,努努力吧。

一周没做题啦,后面坚持继续做题+二刷,接着记录每一天!!!加油!!!

DFS和BFS起步:

797.所有可能的路径

DFS最基本应用

cpp 复制代码
class Solution {
public:
    vector<vector<int>>result;
    vector<int>path;
    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
        path.push_back(0);
        findpath(graph,0);
        return result;
    }
    void findpath(vector<vector<int>>& graph,int cur){
        if(cur == graph.size() - 1){
            result.push_back(path);
            return;
        }
        for(int i = 0;i < graph[cur].size();i++){
            path.push_back(graph[cur][i]);
            findpath(graph,graph[cur][i]);
            path.pop_back();
        }
    }
};

200.岛屿数量

DFS思路主要还是要和回溯放一块搞

cpp 复制代码
class Solution {
public:
    int result = 0;
    int neighbor[4][2] = {1,0,-1,0,0,1,0,-1};
    int numIslands(vector<vector<char>>& grid) {
        int x = grid.size();
        int y = grid[0].size();
        vector<vector<bool>>visited(x,vector<bool>(y,false));
        for(int n = 0;n < x; n++){
            for(int m = 0; m < y;m++){
                if(grid[n][m] == '1' && visited[n][m] == 0){
                    visited[n][m] = 1;
                    result++;
                    dfs(grid,visited,n,m);
                }
            }
        }
        return result;
    }
    void dfs(vector<vector<char>>& grid,vector<vector<bool>>& visited,int x,int y){
        for(int i = 0;i < 4;i++){
            int nextx = x + neighbor[i][0];
            int nexty = y + neighbor[i][1];
            if(nextx < 0 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size())continue;
            if(visited[nextx][nexty] == 0 && grid[nextx][nexty] == '1'){
                visited[nextx][nexty] = 1;
                dfs(grid,visited,nextx,nexty);
            }
        }
    }
};

BFS主要是while循环

cpp 复制代码
class Solution {
public:
    int result = 0;
    int neighbor[4][2] = {1,0,0,1,-1,0,0,-1};
    int numIslands(vector<vector<char>>& grid) {
        int n = grid.size();
        int m = grid[0].size();
        vector<vector<bool>>visited(n,vector<bool>(m,false));
        for(int i = 0;i < n;i++){
            for(int j =0;j <m;j++){
                if(visited[i][j] == 0 && grid[i][j] == '1'){
                    result++;
                    bfs(grid,visited,i,j);
                }
            }
        }
        return result;
    }
    void bfs(vector<vector<char>>& grid, vector<vector<bool>> &visited,int x,int y){
        queue<pair<int,int>>que;
        que.push({x,y});
        visited[x][y] = 1;
        while(!que.empty()){
            pair<int,int>cur = que.front();
            que.pop();
            for(int i = 0;i < 4;i++){
                int nextx = cur.first + neighbor[i][0];
                int nexty = cur.second + neighbor[i][1];
                if(nextx < 0 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size())continue;
                if(visited[nextx][nexty] == 0 && grid[nextx][nexty] == '1'){
                que.push({nextx,nexty});
                visited[nextx][nexty] = 1;
                }
            }
        }
    }
};

今天就这两道题,明天接着来~摸鱼!!!

相关推荐
zy_destiny6 分钟前
【工业场景】用YOLOv26实现8种道路隐患检测
人工智能·深度学习·算法·yolo·机器学习·计算机视觉·目标跟踪
怡步晓心l19 分钟前
Mandelbrot集合的多线程并行计算加速
c++·算法·缓存
老鼠只爱大米26 分钟前
LeetCode经典算法面试题 #114:二叉树展开为链表(递归、迭代、Morris等多种实现方案详细解析)
算法·leetcode·二叉树·原地算法·morris遍历·二叉树展开
Ivanqhz32 分钟前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
HyperAI超神经1 小时前
覆盖天体物理/地球科学/流变学/声学等19种场景,Polymathic AI构建1.3B模型实现精确连续介质仿真
人工智能·深度学习·学习·算法·机器学习·ai编程·vllm
执着2591 小时前
力扣hot100 - 144、二叉树的前序遍历
数据结构·算法·leetcode
范纹杉想快点毕业1 小时前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
近津薪荼1 小时前
递归专题(4)——两两交换链表中的节点
数据结构·c++·学习·算法·链表
2501_940315261 小时前
【无标题】2390:从字符串中移除*
java·开发语言·算法
乐观勇敢坚强的老彭1 小时前
c++寒假营day01下午
c++·算法