684.Redundant Connection(M)

本文介绍了一种算法,用于在一个无向图中找到那条多余的边,这条边的存在使得该图不符合树的定义。通过逐步添加边并利用并查集检测环路的方法,可以有效地找出最后形成的环所对应的边。

题目描述

前言:在这个问题中,树的定义是无向且无环的。
现在给你一个图,在这个图中存在一条多余的边,去掉那一条边后,这个图边符合树的定义,现在我们要做的就是找出那一条多余的边。如果有多条边符合条件,那么则返还最后出现的那条边。原题以及例子如下,
这里写图片描述

算法描述

这里我们通过每次加入一条边,直到环的出现,来得出答案,使得环出现的那条边必然是最后一个符合条件的边。在判断是否成环时可以使用并查集来快速查找其根节点。代码如下,

class Solution {
public:
    vector<int> findRedundantConnection(vector<vector<int>>& edges) {


        node.resize(1000);
        for (int i = 1; i <= 1000; ++i) {
            node[i] = i;
        }
        for (int i = 0; i < edges.size(); ++i) {
            int fir = edges[i][0], sec = edges[i][1];
            cout << fir << " " << sec << endl;
            if (unio(fir, sec)) {
                cout << fir << " " << sec << endl;
                vector<int> ans(2, 0);
                ans[0] = fir;
                ans[1] = sec;
                return ans;
            }
        }

    }

private:
    vector<int> node;
    vector<int> height;
    int findRoot(int i) {
        while (i != node[i]) {
            node[i] = node[node[i]];
            i = node[i];
        }

        return i;
    }
    bool unio(int i, int j) {
        int x = findRoot(i);
        int y = findRoot(j);
        if (x == y) {
            return true;
        } else {
            node[y] = x;
        }
        return false;
    }
};
Module 11 Graphs and Traversals Application Programming Assignment This Programming Assignment is based on Application Exercise 13.8.39: Describe an efficient algorithm that given a network of n stations connected by m high-speed connection links, represented by a graph, it computes, for each station, the set of stations it can reach using no more than four links. Describe the problem in terms of input and expected output clearly. Develop a program that accepts a network G of n switching stations connected by m high speed links, it will output for each station, the set of stations it can reach using no more than four links. Clearly specify all data structures and their implementations used to program the solution. In your submission, you must upload two files: Submit a typed Word or PDF document with description of your solution on LUMINA. Your answers should be very clear, in proper order, and use complete sentences. Review your work several times before submission to be sure the steps of the algorithm are clearly and properly stated and in the correct order. Provide pseudocode for the main algorithms, except for user interface, input/output, etc. Submit a single zip file named Telephone_ Network_Lastname.zip containing the code file and test files. Here are some further guidelines for programming code: Use an OOP language, such as Java, Python or C++. Comment your code. Your code file must compile and accept any number of inputs in the format you specified. You need to design an efficient algorithm which will run in O(n + m) running time that computes for each station, the set of stations it can reach using with maximum 4 links. This can be implemented by using the algorithms mentioned in the text book. Below is the input/output format we will consider for grading: Input: n = number of stations m = number of communication links List of 'm' pairs which represents link between stations Output: From each station list of stations that can be reached using no more than 4 links from each station From the input, you can construct a graph and perform your algorithm to find out a path for each station to reach all of the stations using no more than 4 links. Example Test cases: #Case-1 Input: n = 8 m = 10 links = [(0, 1), (1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (3, 7), (4, 5), (5, 6), (6, 7)] Output: Reachable stations from station 0: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 1: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 2: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 3: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 4: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 5: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 6: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 7: {0, 1, 2, 3, 4, 5, 6, 7} #Case-2 Input: n = 5 m = 4 connections = [(0, 1), (1, 2), (2, 3), (3, 4)] Output: Reachable stations from station 0: {0, 1, 2, 3, 4} Reachable stations from station 1: {0, 1, 2, 3, 4} Reachable stations from station 2: {0, 1, 2, 3, 4} Reachable stations from station 3: {0, 1, 2, 3, 4} Reachable stations from station 4: {0, 1, 2, 3, 4} This format needs to be followed while presenting your code. You can include Doctests or sample test cases in a separate text document which needs to be in the zip file Telephone_ Network_Lastname.zip.
08-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值