Algoritmia - grafos para una sucursal

 
Vista:

grafos para una sucursal

Publicado por fernando (1 intervención) el 03/07/2007 01:20:39
Necesito una structura implementando los grafos para una serie de sucursales u una ayuda referente a este tema por si ya realizaron algun proyecto raferente al misno.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Estructura de grafos para sucursales

Publicado por Alejandro (307 intervenciones) el 11/03/2024 20:08:58
Fernando, aquí tienes una estructura básica en C para representar un grafo que modela la relación entre sucursales. La implementación se basa en una lista de adyacencia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <stdlib.h>
 
// Nodo para representar una conexión entre sucursales
typedef struct Nodo {
    int destino;
    struct Nodo* siguiente;
} Nodo;
 
// Estructura para representar una sucursal y sus conexiones
typedef struct {
    int id;
    char nombre[50];
    Nodo* listaAdyacencia;  // Lista de nodos adyacentes
} Sucursal;
 
// Estructura principal del grafo
typedef struct {
    int numSucursales;
    Sucursal* sucursales;
} Grafo;
 
// Funciones para manejar el grafo
Grafo* crearGrafo(int numSucursales) {
    Grafo* grafo = (Grafo*)malloc(sizeof(Grafo));
    grafo->numSucursales = numSucursales;
    grafo->sucursales = (Sucursal*)malloc(numSucursales * sizeof(Sucursal));
 
    for (int i = 0; i < numSucursales; ++i) {
        grafo->sucursales[i].id = i + 1;  // IDs de sucursales empiezan desde 1
        printf("Ingrese el nombre de la sucursal %d: ", grafo->sucursales[i].id);
        scanf("%s", grafo->sucursales[i].nombre);
        grafo->sucursales[i].listaAdyacencia = NULL;  // Inicializar lista de adyacencia
    }
 
    return grafo;
}
 
void agregarConexion(Grafo* grafo, int origen, int destino) {
    if (origen < 1 || origen > grafo->numSucursales || destino < 1 || destino > grafo->numSucursales) {
        printf("Error: Sucursal no válida\n");
        return;
    }
 
    Nodo* nuevoNodo = (Nodo*)malloc(sizeof(Nodo));
    nuevoNodo->destino = destino;
    nuevoNodo->siguiente = grafo->sucursales[origen - 1].listaAdyacencia;
    grafo->sucursales[origen - 1].listaAdyacencia = nuevoNodo;
}
 
void mostrarGrafo(Grafo* grafo) {
    printf("Grafo de sucursales:\n");
    for (int i = 0; i < grafo->numSucursales; ++i) {
        printf("Sucursal %d (%s): ", grafo->sucursales[i].id, grafo->sucursales[i].nombre);
 
        Nodo* actual = grafo->sucursales[i].listaAdyacencia;
        while (actual != NULL) {
            printf(" -> Sucursal %d", actual->destino);
            actual = actual->siguiente;
        }
        printf("\n");
    }
}
 
int main() {
    int numSucursales;
    printf("Ingrese la cantidad de sucursales: ");
    scanf("%d", &numSucursales);
 
    Grafo* grafo = crearGrafo(numSucursales);
 
    // Agregar conexiones (puedes personalizar esta parte)
    agregarConexion(grafo, 1, 2);
    agregarConexion(grafo, 1, 3);
    agregarConexion(grafo, 2, 3);
    agregarConexion(grafo, 3, 1);
 
    mostrarGrafo(grafo);
 
    // Liberar memoria
    for (int i = 0; i < numSucursales; ++i) {
        Nodo* actual = grafo->sucursales[i].listaAdyacencia;
        while (actual != NULL) {
            Nodo* siguiente = actual->siguiente;
            free(actual);
            actual = siguiente;
        }
    }
    free(grafo->sucursales);
    free(grafo);
 
    return 0;
}

Este programa crea un grafo de sucursales con la posibilidad de agregar conexiones entre ellas. Puedes personalizar el código según tus necesidades y requisitos específicos del proyecto. Además, ten en cuenta que este es un ejemplo básico, y dependiendo de la complejidad de tu proyecto, es posible que necesites realizar adaptaciones adicionales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar