【LeetCode】Redundant Connection

本文介绍了一种利用并查集算法检测图中冗余边的方法。针对含有N个节点的图,在原有树形结构基础上增加了一条额外边,通过遍历每条边并检查连接的两个节点是否属于同一集合来找出这条冗余边。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In this problem, a tree is an undirected graph that is connected and has no cycles.

The given input is a graph that started as a tree with N nodes (with distinct values 1, 2, ..., N), with one additional edge added. The added edge has two different vertices chosen from 1 to N, and was not an edge that already existed.

The resulting graph is given as a 2D-array of edges. Each element of edges is a pair [u, v] with u < v, that represents anundirected edge connecting nodes u and v.

Return an edge that can be removed so that the resulting graph is a tree of N nodes. If there are multiple answers, return the answer that occurs last in the given 2D-array. The answer edge [u, v] should be in the same format, with u < v.

题解:并查集,遍历所有的边,每次遍历一条边时,若两个点不在一个集合内,将两个点加入一个集合,否则输出该跳边。


class Solution {
public:
    vector<int> findRedundantConnection(vector<vector<int>>& edges) {
        int parent[2000];
        int edge_num = edges.size();
        
        for(int i = 0; i <= edge_num; i++){
            parent[i] = i;
        }
        
        for(int i = 0; i < edge_num; i++){
            int first_node = edges[i][0];
            int second_node = edges[i][1];
            int first_node_parent = find_parent(parent, first_node);
            int second_node_parent = find_parent(parent, second_node);
            
            if (first_node_parent == second_node_parent){
                return edges[i];
            }
            else{
                parent[second_node_parent] = first_node_parent;
            }
            
        }
        
    }
    int find_parent(int parent[2000], int node){
        if(node == parent[node]){
            return node;
        }
        else{
            parent[node] = find_parent(parent, parent[node]);
            return parent[node];
        }
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值