Mini grafo con nodos aleatorios

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

typedef struct str_nodo *Nodo;

typedef struct str_nodo    {
    int valor;
    Nodo *nodos;    //Nodos con los que esta unido el nodo actual
    int n_nodos;
}*Grafo;

Nodo crear_nodo(int valor);
void agregar_nodo(Nodo inicial,Nodo final);    //Esta funcion une ambos nodos

int main()    {
    int i,j;
    Grafo grafo,temp;
    srand(time(NULL));
    grafo  = crear_nodo(rand());
    i = 0;
    while(i < 1000000)    {
        agregar_nodo(grafo,crear_nodo(rand()));
        i++;
    }
  
    i = 0;
    while(i < 1000)    {
        temp = grafo->nodos[rand() % grafo->n_nodos];
        j = 0;
        while(j < 200)    {
            agregar_nodo(temp,crear_nodo(rand()));
            j++;
        }
        i++;
    }
    getc(stdin);// Solo para que no se cierre el programa pero no me gusta usar getc
    return 0;  
}

Nodo crear_nodo(int valor)    {
    Nodo nodo;
    nodo = calloc(1,sizeof(struct str_nodo));
    nodo->valor = valor;
    nodo->nodos = NULL;
    nodo->n_nodos = 0;
    return nodo;
}

void agregar_nodo(Nodo inicial,Nodo final)    {
    inicial->nodos = realloc(inicial->nodos,(inicial->n_nodos +1 )*sizeof(struct str_nodo*));    //Incrementamos el espacio para (inicial->n_nodos +1) Apuntadores
    final->nodos = realloc(final->nodos,(final->n_nodos +1 )*sizeof(struct str_nodo*));    //Incrementamos el espacio para (final->n_nodos +1) Apuntadores
  
    inicial->nodos[inicial->n_nodos] = final;
    final->nodos[final->n_nodos] = inicial;
  
    printf("%i <-> %i\n",inicial->valor,final->valor);
    inicial->n_nodos++;
    final->n_nodos++;
}

Va una prueba con dato adjunto

Saludos
https://twitter.com/albertobsd

Comentarios

Entradas populares de este blog

Clave WPA2 por Defecto de equipos TotalPlay (Huawei HG8245H)

Cable modem Ubee - WPA2 y WPS por defecto

rom-0 reader (Spanish version)