เราได้รับจำนวนขอบ Noe และจำนวนจุดยอดพฤศจิกายน เป้าหมายคือการหาจุดยอดที่แยกได้ขั้นต่ำและสูงสุดที่เป็นไปได้ในกราฟดังกล่าวซึ่งไม่มีขอบและไม่มีการนับจุดยอด
จุดยอดที่แยกออกมาเป็นจุดที่ไม่มีขอบเชื่อมต่ออยู่
- สำหรับจุดยอดแยกต่ำสุด
เราจะทำให้แน่ใจว่าทุกขอบถูกแยกออกจากกัน ( ไม่มีสองขอบที่มีจุดยอดร่วมกัน ) แต่ละขอบต้องการเพียง 2 จุดยอด ดังนั้น ,
นับจุดยอดไม่แยก =2 * ไม่ ของขอบ
การนับจุดยอดแยก =ยอดรวม - การนับจุดยอดที่ไม่แยก
ถ้าหมายเลข ของจุดยอดคือ <=2 * ไม่ใช่ ของขอบ หมายความว่าจุดยอดทั้งหมดมีขอบเชื่อมต่อกัน ดังนั้นไม่ ของจุดยอดแยกเป็น 0
- สำหรับจุดยอดสูงสุดแยก
สำหรับสิ่งนี้ เราจะพยายามสร้างรูปหลายเหลี่ยมโดยที่ขอบทั้งหมดเชื่อมต่อกับจุดยอดขั้นต่ำ ซึ่งเป็นไปได้เมื่อเรามีรูปหลายเหลี่ยมโดยที่จุดยอดแต่ละคู่มีเส้นทแยงมุมระหว่างกัน

สำหรับจุดยอด 5 จุดและ 6 ขอบที่กำหนด สี่เหลี่ยมจัตุรัสคือรูปหลายเหลี่ยมที่มี 6 ขอบโดยมี 2 เส้นทแยงมุมเพื่อให้มีจุดยอดเพียง 4 จุดเท่านั้น จุดยอด 1 จุดจะแยกออกจากกันและเป็นจุดสูงสุด
จำนวนเส้นทแยงมุมจากจุดยอดหนึ่งไปยังอีกจุดหนึ่งในรูปหลายเหลี่ยมด้าน n คือ n*(n-3)/2 ขอบทั้งหมด=n*(n-1)/2
อินพุต
No. of vertices 5, edges 6
ผลลัพธ์
Minimum isolated vertices 0. Maximum isolated vertices 1.
คำอธิบาย
ดังแสดงในรูปด้านบน
ป้อนข้อมูล - เลขที่ ของจุดยอด 2, ขอบ=1
ผลผลิต − จุดยอดแยกต่ำสุด 0 จุดยอดสูงสุดแยก 0
คำอธิบาย − ขอบถูกสร้างขึ้นระหว่างจุดยอดอย่างน้อยสองจุด
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
จำนวนเต็ม noe และ nov มีหมายเลข ของขอบและจุดยอด
-
ฟังก์ชัน findisolatedvertices(int v, int e) รับขอบและจุดยอดเป็นพารามิเตอร์และพิมพ์จุดยอดแยกต่ำสุดและสูงสุดที่เป็นไปได้
-
ถ้าไม่. ของจุดยอดคือ <=2*e หมายถึงไม่มีจุดยอดที่แยกออกมา จุดยอดที่ไม่แยกอื่น ๆ คือ 2*e(สูงสุด) ดังนั้นจุดยอดที่แยกได้ต่ำสุดจะเป็น v-2*e
-
สำหรับการคำนวณจุดยอดแยกสูงสุด ให้เริ่มจาก i=1 ถึง no ของจุดยอด ถ้า (i * (i - 1) / 2>=e) แตกเนื่องจากมีจุดยอดเพียง i เท่านั้นที่เพียงพอสำหรับขอบ e
-
i เก็บจุดยอดสูงสุดที่แยกได้
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void findisolatedvertices(int v, int e){
//one edge has 2 vertices
if (v <= 2 * e) //means all veritces have a connected edge
cout << "Minimum no. of isolated vertices: " << 0 << endl;
else {
int niso=2*e; //maximum non isolated vertices
cout << "Minimum no. of isolated vertices: " << v - niso << endl;
}
// To find out maximum number of isolated
// vertices
// Loop to find out value of number of
// vertices that are connected
int i;
for (i = 1; i <= v; i++) {
if (i * (i - 1) / 2 >= e)
break;
}
cout <<endl<< "Maximum no. of isolated vertices: " <<v-i;
}
int main(){
// Number of vertices
int nov = 5;
// Number of edges
int noe = 2;
// Calling the function to maximum and
// minimum number of isolated vertices
findisolatedvertices(nov, noe);
return 0;
} ผลลัพธ์
Minimum no. of isolated vertices: 1 Maximum no. of isolated vertices: 2