Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilangan sisi minimum yang diperlukan untuk membentuk segi tiga

Bilangan sisi minimum yang diperlukan untuk membentuk segi tiga

王林
王林ke hadapan
2023-08-25 21:05:22850semak imbas

Bilangan sisi minimum yang diperlukan untuk membentuk segi tiga

Untuk menentukan bilangan sisi minimum yang diperlukan untuk membentuk segi tiga dalam rajah, kami menganalisis rangkaian antara pusat. Segitiga boleh dibentuk di mana tiga hab berkait secara eksklusif atau secara bulatan mengikut tepi. Bilangan minimum tepi yang diperlukan adalah sama dengan bilangan tepi yang hilang dalam sambungan sedia ada antara tiga hab. Dengan melihat graf dan membezakan pusat yang tidak berkaitan, kita boleh mengira bilangan sisi tambahan yang diperlukan untuk membentuk segi tiga. Kaedah ini berbeza kerana ia memerlukan pelarasan minimum untuk mewujudkan hubungan segi tiga antara pusat dalam carta.

Kaedah penggunaan

  • Kaedah lintasan graf

Kaedah lintasan graf

Kaedah lintasan graf untuk mencari bilangan sisi minimum yang diperlukan untuk mencipta segitiga melibatkan kajian graf menggunakan pengiraan lintasan seperti carian mendalam-dahulu (DFS) atau carian pertama-luas (BFS). Bermula dari setiap pusat dalam graf, kami menavigasi pusat bersebelahan dan menyemak sama ada terdapat laluan panjang 2 antara mana-mana padanan pusat bersebelahan. Jika kaedah sedemikian ditemui, kami telah menemui segitiga. Dengan melakukan semula penyediaan ini untuk semua pusat, kami akan menentukan bilangan minimum sisi tambahan yang diperlukan untuk membentuk sekurang-kurangnya satu segi tiga dalam rajah. Pendekatan ini secara berkesan mengkaji struktur graf untuk membezakan segi tiga dan meminimumkan bilangan sisi yang disertakan.

Algoritma

  • Buat senarai tular atau perwakilan grid rajah anda.

  • Mulakan pembolehubah minMissing untuk menyimpan bilangan minimum tepi yang hilang.

  • Lelaran pada setiap pusat dalam carta:

  • Gunakan carian depth-first (DFS) atau breadth-first search (BFS) untuk memulakan traversal graf dari pusat semasa.

  • Untuk setiap hab jiran j hab semasa, navigasi jirannya k dan semak sama ada terdapat tepi antara j dan k.

  • Jika tiada tepi antara j dan k, kira bilangan sisi yang hilang semasa mencipta segi tiga dengan menolak bilangan sisi sedia ada daripada 3.

  • Gunakan minMissing semasa dengan paling sedikit tepi yang hilang dan minMissing untuk menaik taraf minMissing.

  • Selepas mengulangi operasi untuk semua pusat, nilai minMissing akan mewakili bilangan minimum sisi yang diperlukan untuk mencipta segi tiga.

  • Balas minHilang hormat.

Contoh

#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;
}

Output

Minimum number of edges to form a triangle: 0

Kesimpulan

Tumpuan artikel ini adalah untuk mencari bilangan sisi minimum yang diperlukan untuk mencipta segitiga dalam rajah yang diberikan. Ia menggunakan kaedah traversal graf sebagai strategi untuk menentukan bilangan minimum tepi tambahan yang diperlukan untuk membentuk segi tiga terpendek dalam graf. Pendekatan ini melibatkan penggunaan algoritma traversal seperti carian depth-first (DFS) atau breadth-first search (BFS) untuk menavigasi graf.

Mulakan dari setiap hab dalam graf, siasat hab bersebelahan dan semak sama ada terdapat laluan panjang 2 antara mana-mana padanan hab bersebelahan. Jika laluan sedemikian ditemui, segitiga akan terbentuk. Dengan mencampur semula pemegang ini untuk semua pusat, pengiraan menentukan bilangan minimum sisi tambahan yang diperlukan untuk membentuk segi tiga. Artikel ini memberikan pengiraan terperinci dan contoh kod C untuk melaksanakan kaedah traversal graf. Memahami dan menggunakan kaedah ini dengan mahir dapat memastikan tepi yang diperlukan untuk membentuk segi tiga dalam struktur carta yang berbeza.

Atas ialah kandungan terperinci Bilangan sisi minimum yang diperlukan untuk membentuk segi tiga. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam