Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาจำนวน Sink Nodes ในกราฟโดยใช้ C++


ในบทความนี้ เราจะอธิบายข้อมูลสำคัญเกี่ยวกับการแก้ไขจำนวนโหนด sinks ในกราฟ เรามี Directed Acyclic Graph ที่มีโหนด N (1 ถึง N) และขอบ M ในปัญหานี้ เป้าหมายคือการค้นหาว่ามีโหนดซิงก์จำนวนเท่าใดในกราฟที่กำหนด โหนดซิงก์คือโหนดที่ไม่สร้างขอบขาออกใดๆ นี่เป็นตัวอย่างง่ายๆ −

Input : n = 4, m = 2

Edges[] = {{2, 3}, {4, 3}}
Output : 2

แนวทางง่ายๆ ในการค้นหาวิธีแก้ปัญหา

ในแนวทางนี้ เราจะผ่านขอบของกราฟ ผลักองค์ประกอบที่แตกต่างกันในชุดที่จะไปถึงขอบ จากนั้นลบขนาดของชุดด้วยจำนวนโหนดทั้งหมดที่มีอยู่

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n = 4; // number of nodes.
    int m = 2; // number of edges.
    vector<pair<int, int>> edges = {{2, 3}, {4, 3}}; // the edges going from first to second.
    set<int> s;
    for(int i = 0; i < m; i++){
        s.insert(edges[i].first); // will keep value of
                               // distinct node from which edges are going out.
    }
    cout << n - s.size(); // answer is the total number of nodes - number of non sink nodes.
    return 0;
}

ผลลัพธ์

2

คำอธิบายของโค้ดด้านบน

ในรหัสนี้ เราจะข้ามผ่านขอบเวกเตอร์และแทรกองค์ประกอบแรกของทั้งคู่ลงในชุด มันเก็บเฉพาะองค์ประกอบที่แตกต่างกัน ดังนั้นตอนนี้เราจะลบขนาดเฉพาะของชุดออกจากจำนวนโหนดทั้งหมด โปรแกรมที่แสดงข้างต้นมีความซับซ้อนของเวลาเป็น O(N) โดยที่ N หมายถึงจำนวนขอบที่มีอยู่ในกราฟ

บทสรุป

ในบทความนี้ เราได้แก้ไขปัญหาในการค้นหาจำนวนโหนดซิงก์ที่มีอยู่ในความซับซ้อนของเวลาของกราฟ O(N) โดยใช้ชุดข้อมูล นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ หวังว่าบทความนี้จะเป็นประโยชน์