这是一个无向图的深度优先搜索

//这是一个无向图的深度优先搜索
#include<stdio.h>
int book[101] = { 0 };
int e[101][101] = { 0 };
int sum = 0;
int n = 0;
int d[101] = { 0 };
void dfs(int cur)//当前顶点的编号
{
    printf("%d ", cur);
    sum++;
    if (sum == n)//如果所有顶点都访问过直接退出
    {
        return ;
    }
    for (int i = 1; i <= n; i++)
    {
        if (e[cur][i] == 1 && 0 == book[i])
        {
            book[i] = 1;//标记顶点i已经访问过
            dfs(i);//从顶点i出发
        }
    }
    return ;
}

int main(void)
{
    int i = 0;
    int j = 0;
    int m = 0;
    int a = 0;
    int b = 0;
    scanf("%d%d", &n, & m);
    //初始化二维矩阵
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            if (i == j)
            {
                e[i][j] = 0;
            }
            else
            {
                e[i][j] = 99999999;//设99999999为无穷
            }
        }
    }
    //读入顶点之间的边
    for (i = 1; i <= m; i++)
    {
        scanf("%d%d", &a, &b);
        d[a]++;
        d[b]++;
        e[a][b] = 1;//这是一个无向图
        e[b][a] = 1;
    }
    book[1] = 1;
    dfs(1);
    printf("\n");
    for (i = 1; i <=n; i++)
    {
        printf("%d ", d[i]);
    }

    return 0;
}


这是一个无向图的深度优先搜索
https://6jackjiang.github.io/2021/11/18/categories/C语言/这是一个无向图的深度优先搜索/
作者
米兰的小铁匠
发布于
2021年11月18日
许可协议