国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

5G網(wǎng)絡(luò)建設(shè)--并查集--最小生成樹(shù)

這篇具有很好參考價(jià)值的文章主要介紹了5G網(wǎng)絡(luò)建設(shè)--并查集--最小生成樹(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

題目描述
現(xiàn)需要在某城市進(jìn)行5G網(wǎng)絡(luò)建設(shè),已經(jīng)選取N個(gè)地點(diǎn)設(shè)置5G基站,編號(hào)固定為1到N,接下來(lái)需要各個(gè)基站之間使用光纖進(jìn)行連接以確保基站能互聯(lián)互通,不同基站之間假設(shè)光纖的成本各不相同,且有些節(jié)點(diǎn)之間已經(jīng)存在光纖相連。

請(qǐng)你設(shè)計(jì)算法,計(jì)算出能聯(lián)通這些基站的最小成本是多少。

注意:基站的聯(lián)通具有傳遞性,比如基站A與基站B架設(shè)了光纖,基站B與基站C也架設(shè)了光纖,則基站A與基站C視為可以互相聯(lián)通。

輸入描述
第一行輸入表示基站的個(gè)數(shù)N,其中:

0 < N ≤ 20
第二行輸入表示具備光纖直連條件的基站對(duì)的數(shù)目M,其中:

0 < M < N * (N - 1) / 2
從第三行開(kāi)始連續(xù)輸入M行數(shù)據(jù),格式為

X Y Z P

其中:

X,Y 表示基站的編號(hào)

0 < X ≤ N
0 < Y ≤ N
X ≠ Y
Z 表示在 X、Y之間架設(shè)光纖的成本

0 < Z < 100
P 表示是否已存在光纖連接,0 表示未連接,1表示已連接

輸出描述
如果給定條件,可以建設(shè)成功互聯(lián)互通的5G網(wǎng)絡(luò),則輸出最小的建設(shè)成本

如果給定條件,無(wú)法建設(shè)成功互聯(lián)互通的5G網(wǎng)絡(luò),則輸出 -1

用例1
輸入
3
3
1 2 3 0
1 3 1 0
2 3 5 0
輸出
4
說(shuō)明
只需要在1,2以及1,3基站之間鋪設(shè)光纖,其成本為3+1=4

用例2
輸入
3
1
1 2 5 0
輸出
-1
說(shuō)明
3基站無(wú)法與其他基站連接,輸出-1

用例3
輸入
3
3
1 2 3 0
1 3 1 0
2 3 5 1
輸出
1
說(shuō)明
2,3基站已有光纖相連,只要在1,3基站之間鋪設(shè)光纖,其成本為1文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854673.html

import java.util.*;

// 最小生成樹(shù)
/*其他知識(shí)點(diǎn):
 在一個(gè)list中修改node數(shù)據(jù)也會(huì)引起另一個(gè)list的node數(shù)據(jù)修改
 list中存放的是node的地址引用
*/
class Node {
    // 這里用node表示直連線路
    public int x;
    public int y;
    public int z;
    public boolean p;

    public Node(int x, int y, int z, boolean p) {
        this.x = x;
        this.y = y;
        this.z = z;
        this.p = p;
    }

    public Node(Node other){
        this.x = other.x;
        this.y = other.y;
        this.z = other.z;
        this.p = other.p;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int M = in.nextInt();
        int sum = 0;
        // 初始建設(shè)成本 為 0
        if(M < N-1){
            // 如果 已知可直連的 數(shù)目 M 小于 N-1  則不可能連通
            // 最小生成樹(shù) N-1 條邊 保證連通
            System.out.println(-1);
            return;
        }
        String temp = in.nextLine();
        // ArrayList<String> data = new ArrayList<String>();
        ArrayList<Node> nodeList = new ArrayList<Node>();
        // 全部線路
        while (M>0) {
            // 輸入M行
            M--;
            String tempString = in.nextLine();
            //System.out.println("tempString: " + tempString);
            String[] charString = tempString.split(" ");
            if (charString.length == 4) {
                if(charString[3].equals("0")){
                    Node node = new Node(Integer.valueOf(charString[0]).intValue(),
                        Integer.valueOf(charString[1]).intValue(),
                        Integer.valueOf(charString[2]).intValue(),
                        false);                
                    nodeList.add(node);
                }
                else{
                    Node node = new Node(Integer.valueOf(charString[0]).intValue(),
                        Integer.valueOf(charString[1]).intValue(),
                        0,
                        true);
                    //已鏈接線路的長(zhǎng)度 置 0
                    nodeList.add(node);
                }
                // 這里沒(méi)有拋出異常 默認(rèn) 給定的數(shù)據(jù)就是數(shù)字的字符串了
            } else {
                System.out.println(-1);
                return;
            }
            // data.add(tempString);
            // System.out.println(tempString);
        }

        // 運(yùn)行到這里 已經(jīng)默認(rèn) M >= N - 1
        // 需要求出最小生成樹(shù)
        // 給list排序
        nodeList.sort(new Comparator<Node>(){
            @Override
            public int compare(Node node1,Node node2){
                return node1.z-node2.z;
                // 此時(shí) 按照 z 遞增序列 重排list
            } 
        });
        //測(cè)試nodelist是否正確
        /*for (Node node : nodeList) {
            System.out.println(node.x + " " + node.y + " " + node.z + " " + node.p);
        }*/

        UnionFind unionFind = new UnionFind(N+1);
        // 0 號(hào)空缺不用  從 1 - N

        for(Node node:nodeList){
            if(!unionFind.connected(node.x,node.y)){
                unionFind.union(node.x,node.y);
                sum+=node.z;
                if(unionFind.getCount() == 2){
                    // 0 號(hào)元素 沒(méi)有到 故當(dāng)連通分量為 2 的時(shí)候 有效連通分量只有 1個(gè) 
                    // 最小生成樹(shù)構(gòu)造完成
                    break;
                }
            }
        }
        if(unionFind.getCount()==2){
            // 若沒(méi)有形成 最小生成樹(shù) 也會(huì)最終從循環(huán)中出來(lái) 要判斷是否形成了最小生成樹(shù)
             System.out.print(sum);
        }
        else{
            System.out.print(-1);
        }
    }
}


class UnionFind{
    // 并查集 N個(gè)元素
    private int n;

    private int[] parent;
    //父指針數(shù)組

    private int count;

    public UnionFind(int n){
        this.n = n;
        this.parent = new int[n];

        for(int i=0;i<n;i++){
            parent[i] = i;
            // 初始時(shí) 父指針指向自己
        }

        this.count = n;
        // 初始時(shí) 連通分量個(gè)數(shù)等于 元素個(gè)數(shù)
    }

    public void union(int p, int q){
        int rootP = find(p);
        int rootQ = find(q);

        if(rootP == rootQ){
            // 已經(jīng)位于同一個(gè)連通分量之中
            return;
        }
        else{
            // union操作
            parent[rootP] = rootQ;
            // rootP 的父指針指向 rootQ
            this.count--;
            // 連通分量個(gè)數(shù)減一
        }
    }

    public int find(int element){
        // 找根節(jié)點(diǎn)
        if(parent[element] != element){// 當(dāng) element自己不是根節(jié)點(diǎn)的時(shí)候  
            // 遞歸函數(shù)
            parent[element] = find(parent[element]);
            // find 找 element 的上層節(jié)點(diǎn)的上層節(jié)點(diǎn)
            // 以此類(lèi)推
            // 當(dāng)找到根節(jié)點(diǎn)root 的時(shí)候parent[次節(jié)點(diǎn)] = find(parent[次節(jié)點(diǎn)]) = find(root) = root
            // parent[次次節(jié)點(diǎn)] = find(parent[次次節(jié)點(diǎn)]) = find(次節(jié)點(diǎn))
            // 由于 次節(jié)點(diǎn)!=parent[次節(jié)點(diǎn)] 則parent[次次節(jié)點(diǎn)] = find(次節(jié)點(diǎn)) = parent[次節(jié)點(diǎn)] = root
            // 以此類(lèi)推

            // 則將 實(shí)際樹(shù)高設(shè)置為 2  根節(jié)點(diǎn)root直接與所有子節(jié)點(diǎn)相連
        } 
        return parent[element];
    }

    public boolean connected(int p, int q){
        // 判斷 p q 是否在同一個(gè)連通分量當(dāng)中
        int rootP = find(p);
        int rootQ = find(q);
        return rootP == rootQ;
    }

    public int getCount(){
        // 返回連通分量個(gè)數(shù)
        return this.count;
    }
}

到了這里,關(guān)于5G網(wǎng)絡(luò)建設(shè)--并查集--最小生成樹(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【算法每日一練]-圖論(保姆級(jí)教程篇7 最小生成樹(shù) ,并查集模板篇)#村村通 #最小生成樹(shù)

    【算法每日一練]-圖論(保姆級(jí)教程篇7 最小生成樹(shù) ,并查集模板篇)#村村通 #最小生成樹(shù)

    目錄 題目:村村通 并查集? 題目:最小生成樹(shù) kruskal算法 prim算法 ???????? 先引入問(wèn)題: 要在n個(gè)城市之間鋪設(shè)光纜,主要目標(biāo)是要使這 n 個(gè)城市的 任意兩個(gè)之間都可以通信 ,但鋪設(shè)光纜的費(fèi)用很高,且各個(gè)城市之間鋪設(shè)光纜的費(fèi)用不同,因此另一個(gè)目標(biāo)是要 使鋪設(shè)光

    2024年02月04日
    瀏覽(20)
  • 求無(wú)向圖的最小生成樹(shù)——Kruskal算法(超詳細(xì))【并查集,python實(shí)現(xiàn)】

    求無(wú)向圖的最小生成樹(shù)——Kruskal算法(超詳細(xì))【并查集,python實(shí)現(xiàn)】

    以如下無(wú)向圖為例,求最小生成樹(shù)及其權(quán)值。 補(bǔ)充知識(shí)點(diǎn): 最小生成樹(shù)(不官方的解釋?zhuān)喊泄?jié)點(diǎn),保持整個(gè)圖連通,所有邊權(quán)值之和最小。 1、補(bǔ)充在前 (1)圖的存儲(chǔ) 采用二維列表存儲(chǔ)(點(diǎn),點(diǎn),邊的權(quán)值) (2)頂點(diǎn)轉(zhuǎn)換 為了便于計(jì)算,將字母A ~ G用數(shù)字0 ~ 6代

    2024年02月04日
    瀏覽(24)
  • 【基礎(chǔ)建設(shè)】淺談企業(yè)網(wǎng)絡(luò)安全運(yùn)營(yíng)體系建設(shè)

    【基礎(chǔ)建設(shè)】淺談企業(yè)網(wǎng)絡(luò)安全運(yùn)營(yíng)體系建設(shè)

    引言 在網(wǎng)絡(luò)安全環(huán)境復(fù)雜又嚴(yán)峻的當(dāng)前,國(guó)內(nèi)各大企業(yè)已開(kāi)始組建自己的網(wǎng)絡(luò)安全團(tuán)隊(duì),加強(qiáng)企業(yè)自身安全能力建設(shè),朝著網(wǎng)絡(luò)安全運(yùn)營(yíng)一體化邁進(jìn)。但企業(yè)安全運(yùn)營(yíng)也已逐步從被動(dòng)式轉(zhuǎn)變?yōu)橹鲃?dòng)式,成為將人、管理與技術(shù)結(jié)合,全面覆蓋網(wǎng)絡(luò)安全監(jiān)測(cè)、預(yù)警、防護(hù)、檢測(cè)、

    2024年02月09日
    瀏覽(24)
  • 工控網(wǎng)絡(luò)安全分支-電力行業(yè)網(wǎng)絡(luò)安全建設(shè)

    工控網(wǎng)絡(luò)安全分支-電力行業(yè)網(wǎng)絡(luò)安全建設(shè)

    長(zhǎng)期以來(lái),傳統(tǒng)工業(yè)系統(tǒng)的設(shè)備專(zhuān)有性與天然隔離性使得人們忽視了信息安全隱患的存在,管理者與工程師們往往將安全關(guān)注的焦點(diǎn)和資金預(yù)算都投放在設(shè)備安全和生產(chǎn)安全方面,預(yù)防發(fā)生工業(yè)事故造成人員、財(cái)產(chǎn)、或環(huán)境損失。然而,信息技術(shù)的發(fā)展已經(jīng)打破了傳統(tǒng)的“物

    2024年02月03日
    瀏覽(24)
  • 網(wǎng)絡(luò)建設(shè) 之 React數(shù)據(jù)管理

    React作為一個(gè)用于構(gòu)建用戶(hù)界面的JavaScript庫(kù),很多人認(rèn)為React僅僅只是一個(gè)UI 庫(kù),而不是一個(gè)前端框架,因?yàn)樗跀?shù)據(jù)管理上是缺失的。在做一個(gè)小項(xiàng)目的時(shí)候,維護(hù)的數(shù)據(jù)量不多,管理/維護(hù)數(shù)據(jù)用useState/useRef就足夠了;可是當(dāng)項(xiàng)目變大,需要的數(shù)據(jù)量成百上千,然后就會(huì)發(fā)

    2024年02月07日
    瀏覽(29)
  • 銀行網(wǎng)絡(luò)安全實(shí)戰(zhàn)對(duì)抗體系建設(shè)實(shí)踐

    銀行網(wǎng)絡(luò)安全實(shí)戰(zhàn)對(duì)抗體系建設(shè)實(shí)踐

    黨的十八大以來(lái),將網(wǎng)絡(luò)安全提升到前所未有的新高度,銀行牢牢把握國(guó)家網(wǎng)絡(luò)安全戰(zhàn)略目標(biāo),已加強(qiáng)自身建設(shè),建立了較為完善的安全防護(hù)體系。同時(shí)隨著國(guó)際網(wǎng)絡(luò)安全攻防對(duì)抗升級(jí),銀行轉(zhuǎn)變思路、主動(dòng)作為,從被動(dòng)防守向主動(dòng)防御、動(dòng)態(tài)防御轉(zhuǎn)型,聚焦傳統(tǒng)攻防演練的

    2024年01月21日
    瀏覽(26)
  • 網(wǎng)絡(luò)綜合布線實(shí)訓(xùn)室建設(shè)方案

    網(wǎng)絡(luò)綜合布線實(shí)訓(xùn)室建設(shè)方案

    網(wǎng)絡(luò)綜合布線系統(tǒng)是為了滿(mǎn)足數(shù)據(jù)通信需求而設(shè)計(jì)和建立的一套基礎(chǔ)設(shè)施。它提供了數(shù)據(jù)傳輸、信號(hào)傳輸和電力供應(yīng)的基礎(chǔ)結(jié)構(gòu),支持各種網(wǎng)絡(luò)設(shè)備和終端設(shè)備之間的連接。 網(wǎng)絡(luò)綜合布線系統(tǒng)通常包括以下組成部分: 1) 數(shù)據(jù)通信線纜:網(wǎng)絡(luò)綜合布線系統(tǒng)使用各種類(lèi)型的通信

    2024年02月12日
    瀏覽(20)
  • 網(wǎng)絡(luò)安全合規(guī)-數(shù)據(jù)安全治理體系建設(shè)

    網(wǎng)絡(luò)安全合規(guī)-數(shù)據(jù)安全治理體系建設(shè)

    一、數(shù)據(jù)安全治理體系建設(shè)思路: 一級(jí)文檔。由決策層認(rèn)可、面向組織的數(shù)據(jù)安全方針,通常應(yīng)包括組織數(shù)據(jù)安全工作的總體目標(biāo)、基本原則、數(shù)據(jù)安全決策機(jī)構(gòu)設(shè)置與職責(zé)劃分等。 二級(jí)文檔。根據(jù)數(shù)據(jù)安全方針的要求,對(duì)組織數(shù)據(jù)安全工作各關(guān)鍵領(lǐng)域的管理要求做出具體

    2024年02月01日
    瀏覽(22)
  • 網(wǎng)絡(luò)安全:數(shù)字中國(guó)建設(shè)和發(fā)展的基石

    數(shù)字中國(guó)的概念已經(jīng)深入人心,隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,我們的生活已經(jīng)離不開(kāi)數(shù)字技術(shù)。然而,在享受數(shù)字技術(shù)帶來(lái)的便利的同時(shí),我們也面臨著越來(lái)越多的網(wǎng)絡(luò)安全威脅。網(wǎng)絡(luò)安全不僅關(guān)系到個(gè)人信息的安全,更關(guān)系到國(guó)家安全和社會(huì)穩(wěn)定。 網(wǎng)絡(luò)安全是指通過(guò)采取必

    2024年02月04日
    瀏覽(24)
  • 洞悉安全現(xiàn)狀,建設(shè)網(wǎng)絡(luò)安全防護(hù)新體系

    洞悉安全現(xiàn)狀,建設(shè)網(wǎng)絡(luò)安全防護(hù)新體系

    一、“網(wǎng)絡(luò)攻防演練行動(dòng)“介紹 國(guó)家在2016年發(fā)布《網(wǎng)絡(luò)安全法》,出臺(tái)網(wǎng)絡(luò)安全攻防演練相關(guān)規(guī)定:關(guān)鍵信息基礎(chǔ)設(shè)施的運(yùn)營(yíng)者應(yīng)“制定網(wǎng)絡(luò)安全事件應(yīng)急預(yù)案,并定期進(jìn)行演練”。同年“實(shí)戰(zhàn)化網(wǎng)絡(luò)攻防演練行動(dòng)”成為慣例。由公安部牽頭,每年舉辦一次,針對(duì)全國(guó)范圍

    2024年02月14日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包