【dfs基础讲解及例题】

定义

DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种。
接下来因为懒得去找大段大段深奥的材料 所以就是一些个人的理解。


所谓深搜,是相对于广搜(只是第一篇)来说的。深搜根据名字都知道,我们是将搜索的深度放在首位,而不是别的(比如广度)。
什么意思呢?还是同样一个图给大家理解一下。
【dfs基础讲解及例题】_第1张图片
像这样一个无向图中:
按照广搜的思想,搜索顺序为:
1→2→3→4→5→6→7→8(按照层数依次往下
按照深搜的思想,搜索顺序为:
1→2→5→6→8→3→4→7(一个分支搜完再继续
根据这个过程,我们很容易就可以得到:
在深度优先搜索中,对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续搜下去。当结点v的所有边都己被探寻过(被打标记),搜索将回溯到发现结点v有那条边的始结点。这一过程一直进行到已发现从源结点可达的所有结点为止。如果还存在未被发现的结点,则选择其中一个作为源结点并重复以上过程,整个进程反复进行直到所有结点都被发现为止。


dfs代码相对来说很短,这里我就直接贴上来,当做一个模板理解一下。。

#include
using namespace std;
int n;
bool G[100+1][20000+1];
bool visited[100+1];
void dfs(int i)
{
    visited[i]=true;
    cout<>v>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b;
        G[a][b]=1;
        G[b][a]=1;
    }
    for (int i=1;i<=n;i++)
        if (!visited[i]) dfs(i);
    return 0;
}

【深搜(DFS)-例题-踏青】-C++
【DFS练习】-翻棋子-C++
持续更新…

你可能感兴趣的:(【dfs基础讲解及例题】)