【数据结构】n个顶点,e条遍的图采用邻接表存储,则广度优先遍历的时间复杂度是()A.O(n) B. O(n²) C.O(n³) D.O(n+e)

n个顶点,e条遍的图采用邻接表存储,则广度优先遍历的时间复杂度是()
A.O(n) B. O(n²) 
C.O(n³) D.O(n+e)

考点【广度优先搜索】

广度优先搜索时将每条边和顶点都遍历了一遍,因此时间复杂度为n(n+e)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
广度优先遍历(BFS)是一种的遍历算法,以树的层次遍历为基础,从的某一顶点 v 出发,依次访问 v 的各个未被访问过的邻接点,然后分别从这些邻接点出发再访问它们的邻接点,直到中所有与 v 有路径相通的顶点都被访问为止。 邻接表存储的常用方法,它由一个一维数组和链表组成,数组中每个元素对应一个顶点,链表中存储顶点的邻接点。具体实现可以参考以下代码: ```c++ #include <iostream> #include <queue> #include <vector> using namespace std; const int MAXN = 10001; vector<int> adj[MAXN]; // 邻接表 bool vis[MAXN]; // 标记是否已访问 void BFS(int s) { queue<int> q; q.push(s); vis[s] = true; while (!q.empty()) { int u = q.front(); q.pop(); cout << u << " "; // 访问顶点 u for (int i = 0; i < adj[u].size(); i++) { // 遍历 u 的邻接点 int v = adj[u][i]; if (!vis[v]) { // 如果 v 未被访问 q.push(v); vis[v] = true; } } } } int main() { int n, m, s; cin >> n >> m >> s; for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); // 存储邻接点 adj[v].push_back(u); } BFS(s); return 0; } ``` 代码说明: 1. `adj` 是邻接表,其中 `adj[u]` 存储顶点 `u` 的所有邻接点; 2. `vis` 是标记数组,用于标记每个顶点是否已被访问; 3. `BFS` 函数是广度优先遍历函数,其中 `s` 是起点,首先将起点入队,标记为已访问,然后不断从队首取出顶点,访问该顶点,遍历其所有邻接点,如果邻接点未被访问,则加入队列并标记为已访问。 时间复杂度:$O(n+m)$,其中 $n$ 是顶点数,$m$ 是边数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值