fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Definición de la estructura de un nodo del grafo
  5. struct Node {
  6. int vertex; // Número del vértice
  7. struct Node* next; // Puntero al siguiente nodo en la lista de adyacencia
  8. };
  9.  
  10. // Definición de la estructura del grafo
  11. struct Graph {
  12. int numVertices; // Número de vértices en el grafo
  13. struct Node** adjLists; // Lista de adyacencia para cada vértice
  14. };
  15.  
  16. // Función para crear un nuevo nodo en el grafo
  17. struct Node* createNode(int v) {
  18. struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
  19. newNode->vertex = v;
  20. newNode->next = NULL;
  21. return newNode;
  22. }
  23.  
  24. // Función para crear un grafo con un número dado de vértices
  25. struct Graph* createGraph(int vertices) {
  26. struct Graph* graph = (struct Graph*)malloc(sizeof(struct Graph));
  27. graph->numVertices = vertices;
  28.  
  29. // Asignación de memoria para la lista de adyacencia
  30. graph->adjLists = (struct Node**)malloc(vertices * sizeof(struct Node*));
  31.  
  32. // Inicialización de cada lista de adyacencia como vacía
  33. for (int i = 0; i < vertices; i++) {
  34. graph->adjLists[i] = NULL;
  35. }
  36.  
  37. return graph;
  38. }
  39.  
  40. // Función para agregar una arista al grafo no dirigido
  41. void addEdge(struct Graph* graph, int src, int dest) {
  42. // Agregar la arista de src a dest
  43. struct Node* newNode = createNode(dest);
  44. newNode->next = graph->adjLists[src];
  45. graph->adjLists[src] = newNode;
  46.  
  47. // Debido a que es un grafo no dirigido, se debe agregar una arista de dest a src también
  48. newNode = createNode(src);
  49. newNode->next = graph->adjLists[dest];
  50. graph->adjLists[dest] = newNode;
  51. }
  52.  
  53. // Función para imprimir el grafo
  54. void printGraph(struct Graph* graph) {
  55. for (int i = 0; i < graph->numVertices; i++) {
  56. struct Node* temp = graph->adjLists[i];
  57. printf("Lista de adyacencia del vértice %d\n", i);
  58. while (temp) {
  59. printf(" -> %d", temp->vertex);
  60. temp = temp->next;
  61. }
  62. printf("\n");
  63. }
  64. }
  65.  
  66. int main() {
  67. int numVertices = 5;
  68. struct Graph* graph = createGraph(numVertices);
  69.  
  70. addEdge(graph, 0, 1);
  71. addEdge(graph, 0, 4);
  72. addEdge(graph, 1, 2);
  73. addEdge(graph, 1, 3);
  74. addEdge(graph, 1, 4);
  75. addEdge(graph, 2, 3);
  76. addEdge(graph, 3, 4);
  77.  
  78. printGraph(graph);
  79.  
  80. return 0;
  81. }
  82.  
Success #stdin #stdout 0.01s 5276KB
stdin
Standard input is empty
stdout
Lista de adyacencia del vértice 0
 -> 4 -> 1
Lista de adyacencia del vértice 1
 -> 4 -> 3 -> 2 -> 0
Lista de adyacencia del vértice 2
 -> 3 -> 1
Lista de adyacencia del vértice 3
 -> 4 -> 2 -> 1
Lista de adyacencia del vértice 4
 -> 3 -> 1 -> 0