美文网首页
LeetCode684. 冗余连接

LeetCode684. 冗余连接

作者: lhsjohn | 来源:发表于2019-04-28 22:32 被阅读0次

在本问题中, 树指的是一个连通且无环的无向图。

输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。

结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。

返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u < v。

LeetCode冗余连接.png

注意:

输入的二维数组大小在 3 到 1000。
二维数组中的整数在1到N之间,其中N是输入数组的大小。

思路: 按照给定的边的顺序从后往前不断删除该边,用dfs计算图的连通分量个数,如果边删除前后连通分量个数没有发生变化,则该边为冗余连接,否则继续向前删除边。


class Solution {
    
    int[][] map ;
    boolean []visited;
    
    public int[] findRedundantConnection(int[][] edges) {
        
      int n = edges.length;    
      map = new int[n+1][n+1];
      int[] res = new int[2];
      visited = new boolean[n+1];
        
      for(int[] edge:edges){
          map[edge[0]][edge[1]] = 1;
          map[edge[1]][edge[0]] = 1;
      }
    
      int count = 0;
        for(int i=edges.length-1;i>=0;i--){
            int left = edges[i][0];
            int right = edges[i][1];
            map[left][right] = -1;
            map[right][left] = -1;
            
            for(int j=1;j<=n;j++){
                if(!visited[j]){
                    dfs(j,n);
                    count++;
                }
            }
            
            if(count >1){
                map[left][right] = 1;
                map[right][left] = 1;
                visited = new boolean[n+1];
                count = 0;
                continue;
            }else{
                res[0] = left;
                res[1] = right;
                return res;
            }
            
            
            
            
        }
        
        

        
       return new int[]{}; 
    }
    
    
    void dfs(int i,int n){
         visited[i] = true;
         for(int j=0;j<=n;j++){
             if(map[i][j]==1 &&!visited[j]){
                 dfs(j,n);
             }
         }
    }

    
}

相关文章

  • LeetCode684. 冗余连接

    在本问题中, 树指的是一个连通且无环的无向图。 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, .....

  • 模型轻量化方法总结

    网络剪枝 剪枝目的在于找出网络冗余连接并移除。由于全连接的连接冗余度远高于卷积层,传统的剪枝多在全连接层对冗余神经...

  • 684. 冗余连接

  • LeetCode 684 冗余连接

    1.题目 https://leetcode-cn.com/problems/redundant-connectio...

  • 684. 冗余连接

    主要掌握并查集/dfs/拓扑排序.dfs里要注意从后面开始查,特别是dfs函数如何设计以及

  • 手撕LeetCode #684——Python

    684. 冗余连接[https://leetcode-cn.com/problems/redundant-conn...

  • LeetCode 684. 冗余连接

    题目 树可以看成是一个连通且无环的无向图。给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加...

  • 弱网络环境下,网络性能优化

    1、采用TCP协议、实现长连接 2、采用长连接池,节省握手时间 3、采用ProtocolBuffer,减少冗余数据...

  • LeetCode 684.冗余连接 - JavaScript

    ?Blog :《LeetCode 684.冗余连接 - JavaScript》 题目描述:在本问题中, 树指的是一...

  • DQL_SQL多表连接查询

    多表联合查询:一般一个业务都会对应多张表,避免出现数据冗余 连接查询 分类:按连接方式 在表的连接查询方面有一种现...

网友评论

      本文标题:LeetCode684. 冗余连接

      本文链接:https://www.haomeiwen.com/subject/ijusnqtx.html