21xrx.com
2025-03-22 00:39:10 Saturday
文章检索 我的文章 写文章
C++实验:图的深度优先遍历和广度优先遍历
2023-07-05 01:19:00 深夜i     --     --
C++ 深度优先遍历 广度优先遍历 实验

在计算机科学中,图是一种常见的数据结构,广泛用于计算机科学和其他领域。图可以看做是一个包含节点和边的集合,图中的节点表示对象,而边表示节点之间的关系。

在C++中,可以利用图的深度优先遍历和广度优先遍历算法,对图进行遍历和搜索,以达到不同的目的。

图的深度优先遍历( Depth First Search,DFS)是一种遍历图的方式,它将从某个节点开始,沿着一条路径走到底,直到这条路径走到尽头为止,然后回溯到上一级节点,再依次访问该节点未被访问的相邻节点,递归执行以上操作,直到所有节点都被访问到为止。递归的本质是通过栈来实现的。下面是对图进行深度优先遍历的基本代码实现:

void DFS(int v){
  visited[v] = true;
  cout << v << " ";
  for(int i = 0; i < adj[v].size(); i++){
    int u = adj[v][i];
    if(!visited[u]){
      DFS(u);
    }
  }
}

图的广度优先遍历( Breadth First Search,BFS)是另一种遍历图的方式,它从给定的起始顶点开始进行遍历,访问起始顶点的所有邻居节点,然后逐层向外遍历,直到所有节点都被访问到为止。因为广度优先遍历是按层级遍历的,所以需要使用队列来存储节点。下面是对图进行广度优先遍历的基本代码实现:

void BFS(int s){
  visited[s] = true;
  queue<int> q;
  q.push(s);
  while(!q.empty()){
    int v = q.front();
    q.pop();
    cout << v << " ";
    for(int i = 0; i < adj[v].size(); i++){
      int u = adj[v][i];
      if(!visited[u]){
        visited[u] = true;
        q.push(u);
      }
    }
  }
}

总之,在C++中,图的深度优先遍历和广度优先遍历算法都是非常有用且常用的算法,它们可以帮助实现许多有关图的应用程序。掌握这两种遍历算法,对于学习图算法和实现图应用程序来说是非常重要的。

  
  

评论区