力扣-图论-2【算法学习day.52】

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.所有可能的路径

题目链接: 797. 所有可能的路径 - 力扣(LeetCode)

题面:

分析:简单的dfs

代码:

java 复制代码
class Solution {
    List<List<Integer>> ans = new ArrayList<>();
    int n;
    int[][] graph;
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        List<Integer> list  = new ArrayList<>();
        n = graph.length;
        this.graph = graph;
        int[] flag = new int[n];
        list.add(0);
        recursion(list,0,flag);
        return ans;
    }
    public void recursion(List<Integer> list,int x,int[] flag){
        //  System.out.println(x);
        if(x==(n-1)){
            // System.out.println(1);
            ans.add(new ArrayList<>(list));
        }
        int[] arr = graph[x];
        int m = arr.length;
        for(int i = 0;i<m;i++){
            if(flag[arr[i]]==0){
                list.add(arr[i]);
                flag[arr[i]] = 1;
                recursion(list,arr[i],flag);
                flag[arr[i]] = 0;
                list.remove(list.size()-1);
            }
        } 
    }
}

2.钥匙和房间

题目链接: 841. 钥匙和房间 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    int n;
    int[] have;
    int count;
    int[] flag;
    List<List<Integer>> rooms;
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        this.rooms = rooms;
         n = rooms.size();
         List<Integer> list = rooms.get(0);
         have = new int[n];
         flag = new int[n];
         flag[0] = 1;
         count = n-1;
         have[0] = 1;
         for(int a:list){
            if(have[a]==0)count--;
            have[a] = 1;
         }
         recursion(have);
         System.out.println(count);
         return count==0?true:false;
    }
    public void recursion(int[] have){
        int blog = 0;
        for(int i = 0;i<n;i++){
            if(have[i]==1&&flag[i]==0){
                flag[i] = 1;
                 List<Integer> list = rooms.get(i);
                 for(int a:list){
                    if(have[a]==0)count--;
                     have[a] = 1;
                    
                 }
                 blog = 1;
            }
        }
        if(blog==1)recursion(have);
    }
}

后言

上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!

相关推荐
仰泳的熊猫3 分钟前
1149 Dangerous Goods Packaging
数据结构·c++·算法·pat考试
ALex_zry3 分钟前
现代C++如何解决传统内存分配器的核心痛点
java·c++·spring
山土成旧客4 分钟前
【Python学习打卡-Day26】函数的艺术(上):从基础定义到参数魔法
开发语言·python·学习
Coder_Boy_5 分钟前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音控制-Java部分核心逻辑
java·开发语言·人工智能·单片机
MACKEI6 分钟前
业务域名验证文件添加操作手册
java·开发语言
roman_日积跬步-终至千里6 分钟前
【源码分析】StarRocks EditLog 写入与 Replay 完整流程分析
java·网络·python
车载测试工程师6 分钟前
CAPL学习-AVB交互层-媒体函数1-回调&基本函数
网络·学习·tcp/ip·媒体·capl·canoe
apihz8 分钟前
货币汇率换算免费API接口(每日更新汇率)
android·java·开发语言
_OP_CHEN9 分钟前
【算法基础篇】(三十七)图论基础之多源最短路:Floyd 算法吃透所有点对最短路径!
算法·蓝桥杯·图论·算法竞赛·floyd算法·acm/icpc·多源最短路
Web极客码9 分钟前
如何选择最适合的内容管理系统(CMS)?
java·数据库·算法