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

ค้นหาการเปลี่ยนแปลงค่าสูงสุดของกราฟใน C++


ในปัญหานี้ เราได้รับกราฟของโหนด N งานของเราคือ ค้นหาค่าสูงสุดที่เป็นไปได้ของค่าต่ำสุดของอาร์เรย์ที่แก้ไข

สำหรับกราฟ เรามีการเรียงสับเปลี่ยนของโหนด ซึ่งเป็นจำนวนการเหนี่ยวนำที่มีอย่างน้อย 1 โหนดทางด้านซ้ายของโหนดซึ่งมีขอบร่วมกัน

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

Input : N = 4, edge = {{1, 2}, {2, 3}, {3, 4}, {4, 1}}
Output : 3

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาอย่างง่ายคือโดยการสำรวจต้นไม้จากโหนดหนึ่งไปยังโหนดที่อยู่ติดกันทั้งหมด เราจะค้นหาการเปลี่ยนแปลงของโหนดโดยใช้สูตรของจำนวนโหนดที่เชื่อมต่อ

สูตรคือ

ขนาดของส่วนประกอบ - 1.

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include <bits/stdc++.h>
using namespace std;

int dfs(int x, vector<int> adjMat[], int visited[]){
   int sz = 1;
   visited[x] = 1;
   for (auto ch : adjMat[x])
      if (!visited[ch])
         sz += dfs(ch, adjMat, visited);
   return sz;
}
int maxValPermutationGraph(int n, vector<int> adjMat[]){
   int val = 0;
   int visited[n + 1] = { 0 };
   for (int i = 1; i <= n; i++)
      if (!visited[i])
         val += dfs(i, adjMat, visited) - 1;
   return val;
}
int main(){
   int n = 4;
   vector<int> adjMat[n + 1] = {{1, 2}, {2, 3}, {3, 4}, {4, 1}};
   cout<<"The maximum value permutation of a graph is "<<maxValPermutationGraph(n, adjMat);
   return 0;
}

ผลลัพธ์

The maximum value permutation of a graph is 3