东方博宜OJ 2052:图的 dfs 遍历 → 邻接矩阵 / 邻接表

【题目来源】
https://oj.czos.cn/p/2052

【题目描述】
一个有 n 个结点的无向连通图,这些结点以编号 1,2,...,n 进行编号,现给出结点间的连接关系。
请以结点 1 为起点,按 dfs(深度优先搜索)、优先访问小编号结点的顺序遍历并输出该图。

【输入格式】
第一行为两整数,n 和 e,表示 n 个顶点,e 条边。(2≤n,e≤10)
以下 e 行每行两个数,表示两个结点是连通的。

【输出格式】
只有一行,为按照优先访问小编号结点的 dfs 的结果。

【输入样例】
5 7
1 2
1 3
1 4
2 4
2 5
3 5
4 5

【输出样例】
1 2 4 5 3

【数据范围】
2≤n,e≤10

【算法分析】

链式前向星采用头插法构建,原生无法保证邻接点有序。

若要求按编号从小到大访问邻接点,有两种实现方式:一是使用邻接矩阵,二是先用 vector 邻接表存储,排序后再遍历。

【算法代码:邻接矩阵】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=1e3+5;
int g[N][N];
bool st[N];
int n,m;

void dfs(int u) {
    st[u]=true;
    cout<<u<<" ";
    for(int j=1; j<=n; j++) {
        if(g[u][j] && !st[j]) {
            dfs(j);
        }
    }
}

int main() {
    cin>>n>>m;
    while(m--) {
        int x,y;
        cin>>x>>y;
        g[x][y]=1;
        g[y][x]=1;
    }

    dfs(1);

    return 0;
}


/*
in:
5 7
1 2
1 3
1 4
2 4
2 5
3 5
4 5

out:
1 2 4 5 3
*/

【算法代码:邻接表】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int N=15;
vector<int> g[N];
bool st[N];
int n,m;

void dfs(int u,int fa) {
    cout<<u<<" ";
    st[u]=true;
    for(int i=0; i<g[u].size(); i++) {
        int t=g[u][i];
        if(!st[t]) dfs(t,u);
    }
}

int main() {
    cin>>n>>m;
    while(m--) {
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
    }

    for(int i=1; i<=n; i++) {
        sort(g[i].begin(),g[i].end());
    }

    dfs(1,-1);

    return 0;
}

/*
in:
5 7
1 2
1 3
1 4
2 4
2 5
3 5
4 5

out:
1 2 4 5 3
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/139369904
https://blog.csdn.net/hnjzsyjyj/article/details/163437811
https://blog.csdn.net/hnjzsyjyj/article/details/139681246

相关推荐
MicrosoftCloud3 天前
数据结构 06|图:度怎么数、拓扑序列怎么列、Dijkstra 与关键路径怎么手算
图·邻接矩阵·最小生成树·拓扑排序·最短路径·图的遍历·关键路径
Jasmine_llq1 个月前
《P11967 [GESP202503 八级] 割裂》
邻接表·倍增求 lca(最近公共祖先)·树上点差分(树上差分)·深度优先搜索 dfs·路径提取·倍增 lca 算法
Jasmine_llq1 个月前
《P11966 [GESP202503 八级] 上学》
邻接表·单源最短路径·迪杰斯特拉·快速读入·堆优化 dijkstra·优先队列(最小堆 /heap)·批量输出
wabs6663 个月前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
Tisfy3 个月前
LeetCode 1406.石子游戏 III:递归(DFS+记忆化) / 递推(DP+原地滚动)
leetcode·游戏·深度优先·dfs·题解·博弈
Tisfy3 个月前
LeetCode 0486.预测赢家:深度优先搜索(DFS)
算法·leetcode·深度优先·dfs·博弈
北域码匠3 个月前
深度优先搜索算法(DFS)超全详解|原理+流程+性能分析+完整C#源码(无第三方库)
dfs·二叉树遍历·回溯算法·深度优先搜索·图论算法·面试算法·c# 算法
汉克老师4 个月前
GESP2026年6月认证C++七级( 第一部分选择题(8-15))精讲
c++·dfs·bfs·哈希·二分算法·gesp7级·网格dp
硕风和炜4 个月前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集