Maison >développement back-end >C++ >Nombre minimum de côtés nécessaires pour former un triangle

Nombre minimum de côtés nécessaires pour former un triangle

王林
王林avant
2023-08-25 21:05:22932parcourir

Nombre minimum de côtés nécessaires pour former un triangle

Pour déterminer le nombre minimum de côtés requis pour former un triangle dans le diagramme, nous avons analysé le réseau entre les centres. Un triangle peut être formé là où trois moyeux sont reliés exclusivement ou de manière détournée par des arêtes. Le nombre minimum d'arêtes requis est égal au nombre d'arêtes perdues dans les connexions existantes entre les trois hubs. En regardant le graphique et en distinguant les centres non liés, nous pouvons calculer le nombre de côtés supplémentaires nécessaires pour former le triangle. Cette méthode est différente car elle nécessite des ajustements minimes pour créer une relation triangulaire entre les centres du graphique.

Méthode à utiliser

  • Méthode de parcours graphique

Méthode de parcours graphique

Les méthodes de parcours graphique pour trouver le nombre minimum de côtés requis pour créer un triangle impliquent d'étudier le graphique à l'aide de calculs de parcours tels que la recherche en profondeur d'abord (DFS) ou la recherche en largeur d'abord (BFS). En partant de chaque centre du graphique, nous parcourons ses centres adjacents et vérifions s'il existe un chemin de longueur 2 entre les correspondances de centres adjacents. Si une telle méthode est trouvée, nous avons trouvé un triangle. En refaisant cette préparation pour tous les centres, nous déterminerons le nombre minimum de côtés supplémentaires nécessaires pour former au moins un triangle dans le schéma. Cette approche étudie efficacement la structure du graphique pour différencier les triangles et minimiser le nombre de côtés inclus.

Algorithme

  • Faites une liste contagieuse ou une représentation en grille de votre diagramme.

  • Initialisez la variable minMissing pour stocker le nombre minimum d'arêtes manquantes.

  • Parcourez chaque centre du graphique :

  • Utilisez la recherche en profondeur d'abord (DFS) ou la recherche en largeur d'abord (BFS) pour démarrer la traversée du graphique à partir du centre actuel.

  • Pour chaque hub voisin j du hub actuel, parcourez son voisin k et vérifiez s'il y a un bord entre j et k.

  • S'il n'y a pas d'arête entre j et k, calculez le nombre de côtés perdus lors de la création du triangle en soustrayant le nombre de côtés existants de 3.

  • Utilisez le minMissing actuel avec le moins d'arêtes manquantes et minMissing pour mettre à niveau minMissing.

  • Après avoir répété l'opération pour tous les centres, la valeur de minMissing représentera le nombre minimum de côtés requis pour créer le triangle.

  • Retour minManque de respect.

Exemple

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

Sortie

Minimum number of edges to form a triangle: 0

Conclusion

L'objectif de cet article est de trouver le nombre minimum de côtés requis pour créer un triangle dans un diagramme donné. Il utilise la méthode de parcours graphique comme stratégie pour déterminer le nombre minimum d'arêtes supplémentaires requises pour former le triangle le plus court du graphique. Cette approche implique l'utilisation d'algorithmes de parcours tels que la recherche en profondeur d'abord (DFS) ou la recherche en largeur d'abord (BFS) pour parcourir le graphique.

Partez de chaque hub du graphique, étudiez les hubs adjacents et vérifiez s'il existe un chemin de longueur 2 entre les correspondances de hubs adjacents. Si un tel chemin est trouvé, un triangle se formera. En ressassant cette poignée pour tous les centres, le calcul détermine le nombre minimum de côtés supplémentaires requis pour former le triangle. Cet article donne des calculs détaillés et des exemples de code C pour implémenter la méthode de parcours graphique. Comprendre et appliquer cette méthode peut garantir habilement les bords requis pour former des triangles dans différentes structures graphiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer