Cuente el número de Triángulos únicos usando STL | Conjunto 1 (usando conjunto)

Nos dan n triángulos junto con la longitud de sus tres lados como a,b,c. Ahora necesitamos contar el número de triángulos únicos de estos n triángulos dados. Dos triángulos son diferentes entre sí si tienen al menos uno de los lados diferente.
Ejemplo: 
 

Input: arr[] = {{1, 2, 2},
                {4, 5, 6}, 
                {4, 5, 6}    
Output: 2

Input: arr[] = {{4, 5, 6}, {6, 5, 4},
                {1, 2, 2}, {8, 9, 12}
Output: 3

Le recomendamos encarecidamente que minimice su navegador y que pruebe esto usted mismo primero.
Como se nos pide encontrar el número de triángulos «únicos», podemos usar set o unordered_set. En esta publicación, se analiza el enfoque basado en conjuntos.
¿Cómo almacenar tres lados como un elemento en el contenedor? Usamos el par STL para almacenar los tres lados juntos como 
 

CPP

// A C++ program to find number of unique Triangles
#include <bits/stdc++.h>
using namespace std;
 
// Creating shortcut for an integer pair.
typedef pair<int, int> iPair;
 
// A structure to represent a Triangle with
// three sides as a, b, c
struct Triangle
{
    int a, b, c;
};
 
// A function to sort three numbers a, b and c.
// This function makes 'a' smallest, 'b' middle
// and 'c' largest (Note that a, b and c are passed
// by reference)
void sort3(int &a, int &b, int &c)
{
    vector<int> arr({a, b, c});
    sort(arr.begin(), arr.end());
    a = arr[0]; b = arr[1]; c = arr[2];
}
 
// Function returns the number of unique Triangles
int countUniqueTriangles(struct Triangle arr[],
                           int n)
{
    // A set which consists of unique Triangles
    set < pair< int, iPair > > s;
 
    // Insert all triangles one by one
    for (int i=0; i<n; i++)
    {
        // Find three sides and sort them
        int a = arr[i].a, b = arr[i].b, c = arr[i].c;
        sort3(a, b, c);
 
        // Insert a triangle into the set
        s.insert({a, {b, c}});
    }
 
    // Return set size
    return s.size();
}
 
// Driver program to test above function
int main()
{
    // An array of structure to store sides of 6 Triangles
    struct Triangle arr[] = {{3, 2, 2}, {3, 4, 5}, {1, 2, 2},
                             {2, 2, 3}, {5, 4, 3}, {6, 4, 5}};
    int n = sizeof(arr)/sizeof(Triangle);
 
    cout << "Number of Unique Triangles are "
         << countUniqueTriangles(arr, n);
    return 0;
}

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *