图的深度优先搜索算法DFS

来源:互联网 发布:信鸽软件鑫 编辑:程序博客网 时间:2024/06/02 00:05

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

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

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

算法描述:

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

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

void DFS(Graph g,int v,bool *visited){    ENode *w;    visited[v]=true;    cout<<v;    for(w=g.A[v];w;w=w->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<n;i++)        visited[i]=false;    for(int i=0;i<n;i++)        if(!visited[i])//visited[]数组是一个标记数组,未遍历的标记为false        DFS(g,i,visited);}



原创粉丝点击