首页 > 其他分享 >图论

图论

时间:2023-04-16 11:33:32浏览次数:51  
标签:index 图论 int numCourses edges new public

207、课程表

class Solution {
    public List<Integer>[] edges;
    public int[] ls;
    public boolean flag = true;
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        edges = new List[numCourses];
        for(int i = 0; i < numCourses; i++){
            edges[i] = new ArrayList<Integer>();
        }
        for(int i = 0; i < prerequisites.length; i++){
            edges[prerequisites[i][0]].add(prerequisites[i][1]);
        }
        ls = new int[numCourses];
        for(int i = 0; i < numCourses; i++){
            if(ls[i]==0){
                dfs(i);
                if(!flag){
                    return false;
                }
            }            
            
        }
        return true;
    }
    public void dfs(int index){
        ls[index] = 1;
        List<Integer> edge = edges[index];
        for(Integer integer : edge){
            if(ls[integer]==1){
                flag = false;
                return;
            }else if(ls[integer]==0){
                dfs(integer);
            }
        }
        ls[index]=2;
    }
}

210、课程表 II

class Solution {
    public List<Integer>[] edges;
    public int[] visited;
    public boolean flag = true;
    public int[] result;
    public int score;
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        edges = new List[numCourses];
        for(int i = 0; i < numCourses; i++){
            edges[i] = new ArrayList<>();
        }
        for(int i = 0; i < prerequisites.length; i++){
            edges[prerequisites[i][1]].add(prerequisites[i][0]);
        }
        visited = new int[numCourses];
        result = new int[numCourses];
        score = numCourses-1;
        for(int i = 0; i < numCourses; i++){
            if(visited[i]==0){
                dfs(i);
                if(!flag){
                    return new int[0];
                }
            }
            
        }
        return result;
    }
    public void dfs(int index){
        visited[index] = 1;
        List<Integer> edge = edges[index];
        for(Integer integer : edge){
            if(visited[integer]==0){
                dfs(integer);
                if(!flag){
                    return;
                }
            }else if(visited[integer]==1){
                flag = false;
                return;
            }
        }
        visited[index]=2;
        result[score--]=index;
    }
}

标签:index,图论,int,numCourses,edges,new,public
From: https://www.cnblogs.com/noviceprogrammeroo/p/17322736.html

相关文章

  • 总结与归纳之图论
    (再开一个大坑好吧)前言总论+前置概念正文树上问题大杂烩拓扑序短路问题大杂烩生成树问题大杂烩斯坦纳树分层图差分约束连通性问题大杂烩欧拉/哈密顿路问题大杂烩二分图图匹配问题大杂烩网络流问题大杂烩特殊图问题大杂烩......
  • 算法基础模板整理(基础图论篇)
    拓扑排序bool topo(){    queue<int> q;    for(int u = 1; u <= n; u ++ )        if(!ind[u]) q.push(u);        int cnt = 0;    while(!q.empty()){        int u = q.front();        q.pop(); ......
  • 优化 PMU 放置 (OPP) 问题的六种算法,包括两种模拟退火方法、两种图论过程和递归安全 N
    PMU优化配置 系统完全可观软件:MATLAB优化PMU放置(OPP)问题的六种算法,包括两种模拟退火方法、两种图论过程和递归安全N算法。 从MatPower获得的IEEE14,30,39,57和118bus系统数据,可得出系统完全可观所需配置pmu数量以及对应位置。配有对应文献ID:16150671665749743......
  • 一、图论基础知识(2023.4.13初版[个人向])
    1.图的定义和概念1.图的定义图(Graph)是由顶点的有穷非空集合V和顶点之间的边的集合E组成,通常表示为G={V,E},其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合1.图中点的数据元素称之为顶点线性表中的数据元素称为元素数中的数据元素称为结点2.线性表和树均可以没有元素,......
  • 【图论之拓扑排序】剑指 Offer II 114. 外星文字典
    剑指OfferII114.外星文字典讲解传送门constintN=26,M=N*N;classSolution{public:inth[N],e[M],ne[M],idx=0;boolst[N];intin[N],cnt=0;//上面三行要写在classSolution内部,不然每次调用不会清空voidadd(inta,intb){......
  • 【code】图论
    图一幅图是由节点和边构成的,逻辑结构如下:所以图的逻辑结构为:/*图节点的逻辑结构*/classVertex{intid;Vertex[]neighbors;}一般边的表示,有两种实现方式,一种是邻接表,一种是邻接矩阵邻接表很直观,我把每个节点x的邻居都存到一个列表里,然后把x和这个......
  • 图论
    1.最短距离来源Indeed笔试题原题链接题目描述有\(N\)个村庄,编号\(1\)到\(N\)。村庄之间有\(M\)条无向道路,第\(i\)条道路连接村庄\(a_i\)和村庄\(b_i\),长度是\(c_i\)。所有村庄都是连通的。共有\(K\)个村庄有商店,第\(j\)个有商店的村庄编号是\(x_j\)。......
  • 【算法学习】图论模板
    注意!并查集只适用于无向图。DFS特点:当前层可以获得下层状态、向下层不断遍历处理方式:递归模板://dfs注意剪枝voiddfs(intu){if(u>n){输出路径return;}for(inti=0;i<n;i++)//遍历点{if(条件)......
  • 2023-04-01 图论问题建模和floodfill
    图论问题建模和floodfillfloodfill(洪泛)实际就是图的遍历1图论问题例子:判断二分图题目来源:LeetCode785is-graph-bipartite:,判断二分图,因为题目中已经给出了邻接表,相当于已经给出了Graph,所以直接用二分图的核心算法即可,参考DFS实现二分图检测实现代码2图的建模和二......
  • 经典图论遍历问题:传递信息
    小朋友A在和ta的小伙伴们玩传信息游戏,游戏规则如下:有n名玩家,所有玩家编号分别为0~n-1,其中小朋友A的编号为0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如A可以向B传信息,但B不能向A传信息)。每轮信息必须需要传递给另一......