holyya.com
2025-09-04 10:46:29 Thursday
登录
文章检索 我的文章 写文章
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++中,图的深度优先遍历和广度优先遍历算法都是非常有用且常用的算法,它们可以帮助实现许多有关图的应用程序。掌握这两种遍历算法,对于学习图算法和实现图应用程序来说是非常重要的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复