c++广搜深搜

        广度优先搜索(BFS)是一种基于队列实现的搜索算法,其主要思想是从起点开始向周围扩展,先遍历所有与起点相邻的节点,再遍历与这些节点相邻的节点,以此类推,直到找到终点或者搜索全部节点为止。每次遍历到一个节点时,将该节点加入队列中,直到队列为空为止。

        以下是一个基本的C++实现:

#include 
#include 

using namespace std;

const int N = 100010;

int n, m;
int g[N][N]; // 存储图
bool st[N]; // 存储每个节点是否遍历过
int dist[N]; // 存储起点到每个节点的距离

void bfs(int start)
{
    queue q;
    q.push(start);
    st[start] = true;
    dist[start] = 0;

    while (!q.empty())
    {
        int t = q.front();
        q.pop();

        // 遍历与当前节点相邻的节点
        for (int i = 1; i <= n; i ++)
        {
            if (g[t][i] && !st[i])
            {
                q.push(i);
                st[i] = true;
                dist[i] = dist[t] + 1;
            }
        }
    }
}

int main()
{
    scanf("%d%d", &n, &m);

    // 构建图
    for (int i = 0; i < m; i ++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        g[a][b] = 1;
        g[b][a] = 1; // 如果是有向图,这行可以省略
    }

    bfs(1);

    // 输出起点到每个节点的距离
    for (int i = 1; i <= n; i ++)
        printf("%d ", dist[i]);

    return 0;
}

        深度优先搜索(DFS)是另一种常见的搜索算法,其主要思想是从起点开始一直向下搜索,直到找到终点或者无法继续搜索为止。与BFS不同的是,DFS是通过递归实现的。具体实现方法是从起点开始,遍历与当前节点相邻的节点,如果该节点未被访问过,则递归进入该节点,继续搜索;如果该节点已经被访问过,则回溯到上一个节点继续搜索,直到遍历完整张图为止。

        以下是一个基本的C++实现:

#include 

using namespace std;

const int N = 100010;

int n, m;
int g[N][N]; // 存储图
bool st[N]; // 存储每个节点是否遍历过

void dfs(int u)
{
    st[u] = true;

    // 遍历与当前节点相邻的节点
    for (int i = 1; i <= n; i ++)
    {
        if (g[u][i] && !st[i])
            dfs(i);
    }
}

int main()
{
    scanf("%d%d", &n, &m);

    // 构建图
    for (int i = 0; i < m; i ++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        g[a][b] = 1;
        g[b][a] = 1; // 如果是有向图,这行可以省略
    }

    dfs(1);

    // 输出遍历过的节点
    for (int i = 1; i <= n; i ++)
    {
        if (st[i])
            printf("%d ", i);
    }

    return 0;
}

你可能感兴趣的:(c++深搜广搜,c++入门必备,c++简介,c++,深度优先,开发语言)