图的深度优先搜索算法DFS

对于图的搜索算法做个小的总结:深度优先搜索算法(DFS)

图遍历必须处理两个棘手的情况。首先从起点出发可能无法达到所有的顶点,比如非强连通有向图和非连通无向图,这也是很容易理解的。

其次,图可能会有回路,搜索算法不合适,可能会陷入僵局,这就尴尬了。所以可以为每一个节点设置一个标记位(mark bit)。

算法描述:

1.访问顶点v,并对v打上已访问标记

2.依次从v的未访问的邻接点开始访问,深度搜索图G

void DFS(Graph g,int v,bool *visited)
{
    ENode *w;
    visited[v]=true;
    cout<NextArc)//只要w不为空,一直往下循环
    {
        if(!visited[w->NextArc])
            DFS(g,w->AdjVex,visited)//下一个邻接点存在,往下深度搜索
    }
}
void Traversal_DFS(Graph g)
{
    bool visited[MaxSize];
    int n=g.Vertices;//g.Vertices代表图的结点数目
    for(int i=0;i



你可能感兴趣的:(算法)