Contar el número de aristas en un gráfico no dirigido

Dada una representación de lista de adyacencia gráfica no dirigida. Escribe una función para contar el número de aristas en el gráfico no dirigido.

Complejidad de tiempo esperada : O(V)

Ejemplos:

Input : Adjacency list representation of
        below graph.  
Output : 9
Edge

La idea se basa en Handshaking Lemma. El lema del apretón de manos se trata de gráficos no dirigidos. En todo grafo no dirigido finito el número de vértices de grado impar es siempre par. El lema del apretón de manos es una consecuencia de la fórmula de suma de grados (a veces también llamado lema del apretón de manos)

    handshaking 

Así que recorremos todos los vértices, calculamos la suma de los tamaños de sus listas de adyacencia y finalmente devolvemos sum/2. Debajo de la implementación de la idea anterior

C++

// C++ program to count number of edge in
// undirected graph
#include<bits/stdc++.h>
using namespace std;
  
// Adjacency list representation of graph
class Graph
{
    int V ;
    list < int > *adj;
public :
    Graph( int V )
    {
        this->V = V ;
        adj = new list<int>[V];
    }
    void addEdge ( int u, int v ) ;
    int countEdges () ;
};
  
// add edge to graph
void Graph :: addEdge ( int u, int v )
{
    adj[u].push_back(v);
    adj[v].push_back(u);
}
  
// Returns count of edge in undirected graph
int Graph :: countEdges()
{
    int sum = 0;
  
    //traverse all vertex
    for (int i = 0 ; i < V ; i++)
  
        // add all edge that are linked to the
        // current vertex
        sum += adj[i].size();
  
  
    // The count of edge is always even because in
    // undirected graph every edge is connected
    // twice between two vertices
    return sum/2;
}
  
// driver program to check above function
int main()
{
    int V = 9 ;
    Graph g(V);
  
    // making above shown graph
    g.addEdge(0, 1 );
    g.addEdge(0, 7 );
    g.addEdge(1, 2 );
    g.addEdge(1, 7 );
    g.addEdge(2, 3 );
    g.addEdge(2, 8 );
    g.addEdge(2, 5 );
    g.addEdge(3, 4 );
    g.addEdge(3, 5 );
    g.addEdge(4, 5 );
    g.addEdge(5, 6 );
    g.addEdge(6, 7 );
    g.addEdge(6, 8 );
    g.addEdge(7, 8 );
  
    cout << g.countEdges() << endl;
  
    return 0;
}

Java

// Java program to count number of edge in 
// undirected graph
import java.io.*;
import java.util.*;
  
// Adjacency list representation of graph
class Graph 
{
    int V;
    Vector<Integer>[] adj;
  
    //@SuppressWarnings("unchecked")
    Graph(int V)
    {
        this.V = V;
        this.adj = new Vector[V];
  
        for (int i = 0; i < V; i++)
            adj[i] = new Vector<Integer>();
    }
  
    // add edge to graph
    void addEdge(int u, int v)
    {
        adj[u].add(v);
        adj[v].add(u);
    }
  
    // Returns count of edge in undirected graph
    int countEdges()
    {
        int sum = 0;
  
        // traverse all vertex
        for (int i = 0; i < V; i++)
  
            // add all edge that are linked to the
            // current vertex
            sum += adj[i].size();
  
        // The count of edge is always even because in
        // undirected graph every edge is connected
        // twice between two vertices
        return sum / 2;
    }
}
  
class GFG 
{
  
    // Driver Code
    public static void main(String[] args) throws IOException 
    {
        int V = 9;
        Graph g = new Graph(V);
  
        // making above shown graph
        g.addEdge(0, 1);
        g.addEdge(0, 7);
        g.addEdge(1, 2);
        g.addEdge(1, 7);
        g.addEdge(2, 3);
        g.addEdge(2, 8);
        g.addEdge(2, 5);
        g.addEdge(3, 4);
        g.addEdge(3, 5);
        g.addEdge(4, 5);
        g.addEdge(5, 6);
        g.addEdge(6, 7);
        g.addEdge(6, 8);
        g.addEdge(7, 8);
  
        System.out.println(g.countEdges());
    }
}
  
// This code is contributed by
// sanjeev2552

Python3

# Python3 program to count number of 
# edge in undirected graph 
  
# Adjacency list representation of graph 
class Graph:
    def __init__(self, V):
        self.V = V 
        self.adj = [[] for i in range(V)]
  
    # add edge to graph 
    def addEdge (self, u, v ):
        self.adj[u].append(v) 
        self.adj[v].append(u)
      
    # Returns count of edge in undirected graph 
    def countEdges(self):
        Sum = 0
      
        # traverse all vertex 
        for i in range(self.V):
      
            # add all edge that are linked 
            # to the current vertex 
            Sum += len(self.adj[i]) 
      
        # The count of edge is always even  
        # because in undirected graph every edge  
        # is connected twice between two vertices 
        return Sum // 2
  
# Driver Code
if __name__ == '__main__':
      
    V = 9
    g = Graph(V) 
  
    # making above shown graph 
    g.addEdge(0, 1 ) 
    g.addEdge(0, 7 ) 
    g.addEdge(1, 2 ) 
    g.addEdge(1, 7 ) 
    g.addEdge(2, 3 ) 
    g.addEdge(2, 8 ) 
    g.addEdge(2, 5 ) 
    g.addEdge(3, 4 ) 
    g.addEdge(3, 5 ) 
    g.addEdge(4, 5 ) 
    g.addEdge(5, 6 ) 
    g.addEdge(6, 7 ) 
    g.addEdge(6, 8 ) 
    g.addEdge(7, 8 ) 
  
    print(g.countEdges())
  
# This code is contributed by PranchalK

C#

// C# program to count number of edge in 
// undirected graph
using System;
using System.Collections.Generic;
  
// Adjacency list representation of graph
class Graph 
{
    public int V;
    public List<int>[] adj;
    public Graph(int V)
    {
        this.V = V;
        this.adj = new List<int>[V];
  
        for (int i = 0; i < V; i++)
            adj[i] = new List<int>();
    }
  
    // add edge to graph
    public void addEdge(int u, int v)
    {
        adj[u].Add(v);
        adj[v].Add(u);
    }
  
    // Returns count of edge in undirected graph
    public int countEdges()
    {
        int sum = 0;
  
        // traverse all vertex
        for (int i = 0; i < V; i++)
  
            // add all edge that are linked to the
            // current vertex
            sum += adj[i].Count;
  
        // The count of edge is always even because in
        // undirected graph every edge is connected
        // twice between two vertices
        return sum / 2;
    }
}
  
class GFG 
{
  
    // Driver Code
    public static void Main(String[] args)
    {
        int V = 9;
        Graph g = new Graph(V);
  
        // making above shown graph
        g.addEdge(0, 1);
        g.addEdge(0, 7);
        g.addEdge(1, 2);
        g.addEdge(1, 7);
        g.addEdge(2, 3);
        g.addEdge(2, 8);
        g.addEdge(2, 5);
        g.addEdge(3, 4);
        g.addEdge(3, 5);
        g.addEdge(4, 5);
        g.addEdge(5, 6);
        g.addEdge(6, 7);
        g.addEdge(6, 8);
        g.addEdge(7, 8);
  
        Console.WriteLine(g.countEdges());
    }
}
  
// This code is contributed by PrinciRaj1992

Producción:

14

Complejidad del Tiempo: O(V)

Este artículo es una contribución de Nishant Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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 *