สมมติว่าเรามีเมทริกซ์การชิดกันของกราฟ G เราต้องตรวจสอบว่าเราสามารถแบ่งจุดยอดออกเป็นชุดที่ไม่ว่างได้หรือไม่ V1, ... Vk เช่นนั้น:ทุกขอบเชื่อมจุดยอดสองจุดที่เป็นชุดที่อยู่ติดกันสองชุด ถ้าคำตอบคือใช่ เราต้องหาค่าสูงสุดของเซต k ในการหารดังกล่าว
ดังนั้นหากอินพุตเป็นแบบ
0 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 |
แล้วผลลัพธ์จะเป็น 4
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
กำหนดอาร์เรย์ dp ของขนาด:210.n :=ขนาดของ matrixfl :=1ans :=0 สำหรับการเริ่มต้น i :=0 เมื่อฉันตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;int แก้ปัญหา (เวกเตอร์<เวกเตอร์ > เมทริกซ์){ int dp[210]; int n =matrix.size(); int fl =1; int ans =0; สำหรับ (int i =0; i q; q.push(i); ในขณะที่ (!q.empty()){ int x =q.front(); q.ป๊อป(); สำหรับ (int j =0; j > matrix ={ 0, 1, 0, 1, 1, 0 }, { 1, 0, 1, 0, 0, 1 }, { 0, 1, 0, 1, 0, 0 }, { 1, 0, 1, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0 } }; ศาล <<แก้ (เมทริกซ์) < อินพุต
<ก่อนหน้า>{ { 0, 1, 0, 1, 1, 0 }, { 1, 0, 1, 0, 0, 1 }, { 0, 1, 0, 1, 0, 0 }, { 1, 0 , 1, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0 } }ผลลัพธ์
4