首頁 >後端開發 >C++ >形成一個三角形所需添加的最小邊數

形成一個三角形所需添加的最小邊數

王林
王林轉載
2023-08-25 21:05:22931瀏覽

形成一個三角形所需添加的最小邊數

為了確定在圖表中形成三角形所需的最少邊數,我們分析了中心之間的網絡。在三個輪轂專門關聯或透過邊緣以迂迴方式關聯的情況下,可以形成三角形。所需的最小邊數等於三個集線器之間現有連接中遺失的邊數。透過查看圖表並區分不相關的中心,我們可以計算形成三角形所需的額外邊的數量。這種方法有所不同,因為它需要最少的調整來在圖表中的中心之間建立三角關係。

使用的方法

  • 圖遍歷方法

#圖遍歷方法

用於尋找創建三角形所需的最少邊數的圖遍歷方法涉及使用深度優先查找 (DFS) 或廣度優先查找 (BFS) 等遍歷計算來研究圖表。從圖表中的每個中心開始,我們導航其相鄰的中心並檢查相鄰中心的任何匹配之間是否存在長度為 2 的路徑。如果找到了這樣的方法,我們就找到了一個三角形。透過對所有中心重新進行這項準備工作,我們將決定在圖表中形成至少一個三角形所需的最少額外邊數。這種方法有效地研究了圖表結構,以區分三角形並最大限度地減少包含的邊數。

演算法

  • 製作圖表的傳染性清單或網格表示。

  • 初始化變數 minMissing 以儲存最少數量的丟失邊。

  • 迭代圖表中的每個中心:

  • 利用深度優先尋找 (DFS) 或廣度優先查找 (BFS) 從目前中心開始圖表遍歷。

  • 對於目前樞紐的每個相鄰樞紐 j,導航其鄰居 k 並檢查 j 和 k 之間是否存在邊緣。

  • 如果 j 和 k 之間沒有邊,則透過從 3 中減去現有邊的數量來計算建立三角形時遺失的邊的數量。

  • 使用目前遺失邊緣最少的 minMissing 和 minMissing 來升級 minMissing。

  • 對所有中心進行重複操作後,minMissing 的值將表示建立三角形所需的最少邊數。

  • 返回minMissing的尊重。

範例

#include <iostream>
#include <vector>
#include <queue>

int minimumMissingEdges(std::vector<std::vector<int>>& graph) {
    int minMissing = 3; // Variable to store the least number of lost edges

    // Iterate over each hub in the graph
    for (int hub = 0; hub < graph.size(); ++hub) {
        std::vector<bool> visited(graph.size(), false); // Mark nodes as unvisited
        int lostEdges = 0; // Number of lost edges to form a triangle

        // Begin chart traversal from the current hub utilizing Breadth-First Search (BFS)
        std::queue<int> q;
        q.push(hub);
        visited[hub] = true;

        while (!q.empty()) {
            int currentHub = q.front();
            q.pop();

            // Check neighbors of the current hub
            for (int neighbor : graph[currentHub]) {
                // Check if there's an edge between the current hub and its neighbor
                if (!visited[neighbor]) {
                    visited[neighbor] = true;
                    q.push(neighbor);
                    // If there's no edge between the current hub and its neighbor, increment lostEdges
                    if (!graph[currentHub][neighbor]) {
                        lostEdges++;
                    }
                }
            }
        }

        // Update minMissing with the least of the current lost edges and minMissing
        minMissing = std::min(minMissing, lostEdges);
    }

    return minMissing;
}

int main() {
    // Example usage
    std::vector<std::vector<int>> graph = {
        {0, 1, 1, 0},
        {1, 0, 0, 1},
        {1, 0, 0, 1},
        {0, 1, 1, 0}
    };

    int minMissingEdges = minimumMissingEdges(graph);
    std::cout << "Minimum number of edges to form a triangle: " << minMissingEdges << std::endl;

    return 0;
}

輸出

Minimum number of edges to form a triangle: 0

結論

本文的重點是找到在給定圖表中創建三角形所需的最少邊數。它將圖表遍歷方法作為一種策略來確定在圖表中形成最短三角形所需的最少量額外邊。此方法包括使用深度優先查找 (DFS) 或廣度優先查找 (BFS) 等遍歷演算法來導航圖表。

從圖表中的每個集線器開始,調查相鄰的集線器,並檢查相鄰集線器的任何匹配之間是否存在長度為 2 的路徑。如果找到這樣的路徑,就會形成三角形。透過為所有中心重新散列此句柄,計算確定了形成三角形所需的最少附加邊數。本文給出了用於實現圖表遍歷方法的詳細計算和 C 程式碼範例。理解和應用這種方法可以熟練地保證所需的邊緣,從而在不同的圖表結構中形成三角形。

以上是形成一個三角形所需添加的最小邊數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除