DFS和BFS

一个典例

点击查看代码
#include <stdio.h>
#include <algorithm>

#define MAXN 100005

int visited[MAXN];
int queue[MAXN];
int graph[MAXN][MAXN];

void bfs(int u, int n) {
    int front = 0, rear = 0;
    memset(visited, -1, sizeof(visited));
    queue[rear++] = u;
    visited[u] = 1;
    while (front < rear) {
        int now = queue[front++];
        printf("%d ", now);
        for (int i = 1; i <= n; i++) {
            if (graph[now][i] && !visited[i]) {
                queue[rear++] = i;
                visited[i] = 1;
            }
        }
    }
}
void dfs(int u, int n){
    visited[u] = 1;
    printf("%d ", u);
    for (int i = 1; i <= n; i++) {
        if (graph[u][i] && !visited[i]) {
            dfs(i, n);
        }
    }
}

int main(){
    int n,m,v;
    scanf("%d %d %d", &n, &m, &v);
    for (int i = 0; i < m; i++) {
        int a, b;
        scanf("%d %d", &a, &b);
        graph[a][b] = 1;
        graph[b][a] = 1;  // 无向图
    }
    dfs(v, n);
    printf("\n");
    bfs(v, n);
    printf("\n");
    return 0;
}
posted @ 2025-06-03 00:21  sirro1uta  阅读(9)  评论(0)    收藏  举报