深度优先搜索

原创 2016年05月31日 23:13:41

深度优先搜索的优先遍历深度更大的顶点,所以我们可以借助栈这一数据结构来实现:

1 将要访问的第一个顶点 v 入栈,然后首先对其进行访问;

2 将顶点 v 出栈,依次将与顶点 v 相邻且未被访问的顶点 c 压入栈中;

3 重复第一步操作,直至栈为空。
#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

class Graph {
private:
    int n;  //!< 顶点数量
    vector<int> *edges;  //!< 邻接表
    bool *visited;

public:
    Graph(int input_n) {
        n = input_n;
        edges = new vector<int>[n];
        visited=new bool[n];
        memset(visited,0,n);
    }

    ~Graph() {
        delete[] edges;
        delete[] visited;
    }

    void insert(int x, int y) {
        edges[x].push_back(y);
        edges[y].push_back(x);
    }

    void dfs(int vertex) {
        cout<<vertex<<endl;
        visited[vertex]=true;
        for(int adj_vertex:edges[vertex]){
            if( !visited[adj_vertex]){
                dfs(adj_vertex);
            }
        }
    }
};

int main() {
    int n, m, k;
    cin >> n >> m;
    Graph g(n);
    for (int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        g.insert(x, y);
    }
    cin >> k;
    g.dfs(k);
    return 0;
}
版权声明:ShirleyPaul原创,未经博主允许不得转载

深度优先搜索的实现

图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。注意到树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历。图的遍历主要有两种算法:...
  • lisong694767315
  • lisong694767315
  • 2014年07月04日 16:06
  • 2368

python实现图的深度优先搜索和广度优先搜索

要用的图 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,...
  • chuangshishen0
  • chuangshishen0
  • 2017年11月06日 20:46
  • 171

“生动”讲解——深度优先搜索与广度优先搜索

通过GIF图“生动”介绍深度优先搜索与广度优先搜索
  • a396901990
  • a396901990
  • 2015年04月21日 00:25
  • 9642

深度优先搜索和广度优先搜索的比较与分析

深度优先搜索和广度优先搜索的比较与分析 一、深度优先搜索和广度优先搜索的深入讨论   (一)深度优先搜索的特点是: (1)无论问题的内容和性质以及求解要求如何不同,它们的程序结...
  • qq328691560
  • qq328691560
  • 2015年08月13日 15:46
  • 3509

回溯法--深度优先搜索

回溯法--深度优先搜索,AutoPilot02(去哪儿2017校招真题),AutoPilot(去哪儿2017校招真题),矩阵中的路径,剑指offer;机器人的运动范围 ,剑指offer...
  • mine_song
  • mine_song
  • 2017年04月05日 12:58
  • 608

java实现图的深度优先搜索和广度优先搜索

java实现图的深度优先搜索和广度优先搜索
  • wu020708
  • wu020708
  • 2016年06月18日 12:51
  • 873

广度优先、深度优先搜索算法——LeetCode

广度优先搜索(Breadth-first Search)、深度优先搜索(Depth-first Search)算法面试题——LeetCode...
  • sunxianghuang
  • sunxianghuang
  • 2016年08月26日 19:55
  • 2324

十二、图的遍历--(2)深度优先搜索算法

摘自计蒜客:http://www.jisuanke.com/course/35/7316 深度优先搜索(Depth-First-Search,简称DFS)。这是一种常见的用于遍历或搜索树或者图的算法。...
  • firetreeSF
  • firetreeSF
  • 2016年05月01日 22:06
  • 999

图基本算法 图搜索基于邻接表的(广度优先、深度优先)

BFS    注:以下代码均为部分,关于图的表示方法参看我的博客—图的存储:   一、广度优先搜索   广度优先搜索(BFS)是最简单的图搜索算法之一,也是很多重要的图算法...
  • tham_
  • tham_
  • 2015年05月27日 16:07
  • 2168

关于图的广度优先搜索(BFS)和深度优先搜索(DFS)

前言:图的广度优先搜索和深度优先搜索对于获取图的结构信息具有重要的作用,很多图相关的算法都是建立在对图的结构进行搜索的基础上。如最小生成树算法、Dijkstra最短路径算法都采用了和BFS相似的思想。...
  • u012878643
  • u012878643
  • 2015年07月02日 10:38
  • 2830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度优先搜索
举报原因:
原因补充:

(最多只允许输入30个字)