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

จำนวนขอบสูงสุดในกราฟแบ่งสองส่วน (Bipartite Graph) ใน C++

คำอธิบายปัญหา

กำหนดจำนวนเต็ม N ซึ่งแทนจำนวนโหนด (Vertices) งานคือการหาจำนวนขอบสูงสุดที่เป็นไปได้ในกราฟแบ่งสองส่วน (Bipartite graph) ที่มี N โหนด

กราฟแบ่งสองส่วน (Bipartite Graph)

  • กราฟแบ่งสองส่วนคือกราฟที่มี 2 เซตของโหนด
  • เซตเหล่านี้มีลักษณะที่โหนดในเซตเดียวกันจะไม่มีขอบเชื่อมต่อกัน

ตัวอย่าง

ถ้า N = 10 จะมีขอบทั้งหมด 25 ขอบ:

  • ทั้งสองเซตจะมีโหนด 5 ตัว และทุกโหนดของเซตแรกจะมีขอบเชื่อมกับทุกโหนดของเซตที่สอง
  • ดังนั้น ขอบทั้งหมด = 5 * 5 = 25

อัลกอริทึม

  • จำนวนขอบจะสูงสุดเมื่อทุกโหนดของเซตหนึ่งมีขอบเชื่อมกับทุกโหนดของอีกเซต นั่นคือ edges = m * n โดยที่ m และ n คือจำนวนโหนดในทั้งสองเซต
  • เพื่อให้จำนวนขอบสูงสุด m ต้องเท่ากับ n หรือใกล้เคียงกันมากที่สุด
  • ดังนั้น จำนวนขอบสูงสุดสามารถคำนวณได้จากสูตร:

            (n * n) / 4

ตัวอย่างโค้ด

#include <bits/stdc++.h> using namespace std; int getMaxEdges(int n) {    return floor((n * n) / 4); } int main() {    int n = 7;    cout << "Maximum edges = " << getMaxEdges(n) << endl;    return 0; }

ผลลัพธ์

เมื่อคอมไพล์และรันโปรแกรมด้านบน จะได้ผลลัพธ์ดังนี้:

Maximum edges = 12