mirror of
https://github.moeyy.xyz/https://github.com/TheAlgorithms/C.git
synced 2023-10-11 15:56:24 +08:00
Added dynamic_graph_algorithms.c
This commit is contained in:
parent
e5dad3fa8d
commit
fc357c5c26
98
data_structures/graphs/dynamic_graph_algorithms.c
Normal file
98
data_structures/graphs/dynamic_graph_algorithms.c
Normal file
@ -0,0 +1,98 @@
|
||||
// The code represents a basic dynamic graph in C, which can grow and change over time. It allows you to add and remove connections (edges) between points (vertices) in the graph.
|
||||
// This is useful for modeling and solving problems that involve changing relationships between objects, like social networks or transportation systems.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct Node {
|
||||
int data;
|
||||
struct Node* next;
|
||||
};
|
||||
|
||||
struct Graph {
|
||||
int V;
|
||||
struct Node** adjacencyList;
|
||||
};
|
||||
|
||||
struct Graph* createGraph(int V);
|
||||
void addEdge(struct Graph* graph, int src, int dest);
|
||||
void removeEdge(struct Graph* graph, int src, int dest);
|
||||
void printGraph(struct Graph* graph);
|
||||
|
||||
int main() {
|
||||
int V = 5; // Number of vertices
|
||||
struct Graph* graph = createGraph(V);
|
||||
|
||||
// Add edges
|
||||
addEdge(graph, 0, 1);
|
||||
addEdge(graph, 0, 2);
|
||||
addEdge(graph, 1, 3);
|
||||
addEdge(graph, 2, 4);
|
||||
|
||||
// Print the initial graph
|
||||
printf("Initial Graph:\n");
|
||||
printGraph(graph);
|
||||
|
||||
// Remove an edge
|
||||
removeEdge(graph, 0, 2);
|
||||
|
||||
// Print the modified graph
|
||||
printf("\nGraph after removing edge:\n");
|
||||
printGraph(graph);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct Graph* createGraph(int V) {
|
||||
struct Graph* graph = (struct Graph*)malloc(sizeof(struct Graph));
|
||||
graph->V = V;
|
||||
graph->adjacencyList = (struct Node**)malloc(sizeof(struct Node*) * V);
|
||||
|
||||
for (int i = 0; i < V; i++) {
|
||||
graph->adjacencyList[i] = NULL;
|
||||
}
|
||||
|
||||
return graph;
|
||||
}
|
||||
|
||||
void addEdge(struct Graph* graph, int src, int dest) {
|
||||
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
|
||||
newNode->data = dest;
|
||||
newNode->next = graph->adjacencyList[src];
|
||||
graph->adjacencyList[src] = newNode;
|
||||
}
|
||||
|
||||
void removeEdge(struct Graph* graph, int src, int dest) {
|
||||
struct Node* current = graph->adjacencyList[src];
|
||||
struct Node* prev = NULL;
|
||||
|
||||
while (current != NULL && current->data != dest) {
|
||||
prev = current;
|
||||
current = current->next;
|
||||
}
|
||||
|
||||
if (current == NULL) {
|
||||
printf("Edge does not exist.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (prev == NULL) {
|
||||
graph->adjacencyList[src] = current->next;
|
||||
} else {
|
||||
prev->next = current->next;
|
||||
}
|
||||
|
||||
free(current);
|
||||
}
|
||||
|
||||
void printGraph(struct Graph* graph) {
|
||||
for (int i = 0; i < graph->V; i++) {
|
||||
struct Node* current = graph->adjacencyList[i];
|
||||
printf("Vertex %d:", i);
|
||||
while (current != NULL) {
|
||||
printf(" -> %d", current->data);
|
||||
current = current->next;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user