📜  bfs - C 编程语言(1)

📅  最后修改于: 2023-12-03 14:59:31.025000             🧑  作者: Mango

BFS - C 编程语言

BFS(Breadth First Search)是一种广度优先搜索算法,应用于图遍历。其核心思想是从起点开始,不断将当前点的未遍历邻居节点加入队列,直到队列为空。它也是图论中最基本的算法之一,经常用于解决最短路径等问题。

在 C 编程语言中,我们可以使用队列和循环来实现 BFS 算法。下面是一个示例代码片段:

#include <stdio.h>

#define MAX 100

int queue[MAX];
int front = -1;
int rear = -1;
int visited[MAX];

void enqueue(int vertex) {
    if (rear == MAX - 1) {
        printf("Queue overflow!");
    } else {
        if (front == -1) {
            front = 0;
        }
        rear++;
        queue[rear] = vertex;
    }
}

int dequeue() {
    if (front == -1 || front > rear) {
        printf("Queue underflow!");
        return -1;
    } else {
        int vertex = queue[front];
        front++;
        return vertex;
    }
}

void bfs(int adjacency_matrix[MAX][MAX], int vertices, int start_vertex) {
    int i, vertex;
    enqueue(start_vertex);
    visited[start_vertex] = 1;
    printf("BFS Traversal: ");

    while (front != -1) {
        vertex = dequeue();
        printf("%d ", vertex);

        for (i = 0; i < vertices; i++) {
            if (adjacency_matrix[vertex][i] == 1 && visited[i] == 0) {
                enqueue(i);
                visited[i] = 1;
            }
        }
    }
}

int main() {
    int adjacency_matrix[MAX][MAX], vertices, i, j, start_vertex;
    printf("\nEnter the number of vertices: ");
    scanf("%d", &vertices);
    printf("\nEnter the adjacency matrix:\n");

    for (i = 0; i < vertices; i++) {
        for(j = 0; j < vertices; j++) {
            scanf("%d", &adjacency_matrix[i][j]);
        }
    }

    for (i = 0; i < vertices; i++) {
        visited[i] = 0;
    }

    printf("\nEnter the starting vertex: ");
    scanf("%d", &start_vertex);
    bfs(adjacency_matrix, vertices, start_vertex);
    printf("\n");
    return 0;
}

在这个例子中,我们使用了一个数组来存储访问过的顶点。我们也有一个 enqueue 函数和一个 dequeue 函数来操作队列。bfs 函数则实现了 BFS 算法。在 main 函数中,我们输入邻接矩阵,调用 bfs 函数,并输出遍历结果。

这段代码简单易懂,但我们需要确保输入的数据是合法的。在实际项目中,需要继续完善代码来处理各种异常情况。