Spaces:
Sleeping
Sleeping
Download training_programs/05_bfs_graph.c from HideIron/compiler-env: direct link, hf CLI and curl.
- Browser
- Download file 2.57 kB
-
https://huggingface.co/spaces/HideIron/compiler-env/resolve/main/training_programs/05_bfs_graph.c
- Command line
-
hf download hf://spaces/HideIron/compiler-env/training_programs/05_bfs_graph.c
-
curl -L -o 05_bfs_graph.c https://huggingface.co/spaces/HideIron/compiler-env/resolve/main/training_programs/05_bfs_graph.c
2.57 kB
| typedef struct Node { | |
| int vertex; | |
| struct Node* next; | |
| } Node; | |
| typedef struct Queue { | |
| int* items; | |
| int front; | |
| int rear; | |
| int size; | |
| } Queue; | |
| Queue* createQueue(int size) { | |
| Queue* q = (Queue*)malloc(sizeof(Queue)); | |
| q->items = (int*)malloc(size * sizeof(int)); | |
| q->front = -1; | |
| q->rear = -1; | |
| q->size = size; | |
| return q; | |
| } | |
| void enqueue(Queue* q, int value) { | |
| if (q->rear == q->size - 1) | |
| return; | |
| if (q->front == -1) | |
| q->front = 0; | |
| q->rear++; | |
| q->items[q->rear] = value; | |
| } | |
| int dequeue(Queue* q) { | |
| if (q->front == -1) | |
| return -1; | |
| int item = q->items[q->front]; | |
| q->front++; | |
| if (q->front > q->rear) | |
| q->front = q->rear = -1; | |
| return item; | |
| } | |
| int isEmpty(Queue* q) { | |
| return q->front == -1; | |
| } | |
| void BFS(Node** adjList, int vertices, int start, int* visited) { | |
| Queue* q = createQueue(vertices); | |
| visited[start] = 1; | |
| enqueue(q, start); | |
| while (!isEmpty(q)) { | |
| int current = dequeue(q); | |
| Node* temp = adjList[current]; | |
| while (temp) { | |
| int adjVertex = temp->vertex; | |
| if (!visited[adjVertex]) { | |
| visited[adjVertex] = 1; | |
| enqueue(q, adjVertex); | |
| } | |
| temp = temp->next; | |
| } | |
| } | |
| free(q->items); | |
| free(q); | |
| } | |
| int main() { | |
| int vertices = 8000; | |
| Node** adjList = (Node**)malloc(vertices * sizeof(Node*)); | |
| int* visited = (int*)calloc(vertices, sizeof(int)); | |
| for (int i = 0; i < vertices; i++) | |
| adjList[i] = NULL; | |
| srand(42); | |
| for (int i = 0; i < vertices; i++) { | |
| for (int j = 0; j < 5; j++) { | |
| int dest = rand() % vertices; | |
| Node* newNode = (Node*)malloc(sizeof(Node)); | |
| newNode->vertex = dest; | |
| newNode->next = adjList[i]; | |
| adjList[i] = newNode; | |
| } | |
| } | |
| clock_t start = clock(); | |
| BFS(adjList, vertices, 0, visited); | |
| clock_t end = clock(); | |
| double time_spent = (double)(end - start) / CLOCKS_PER_SEC; | |
| printf("BFS: %d vertices in %.6f seconds\n", vertices, time_spent); | |
| for (int i = 0; i < vertices; i++) { | |
| Node* temp = adjList[i]; | |
| while (temp) { | |
| Node* toFree = temp; | |
| temp = temp->next; | |
| free(toFree); | |
| } | |
| } | |
| free(adjList); | |
| free(visited); | |
| return 0; | |
| } | |