图的深度优先遍历DFS(非递归C语言)邻接表存储

1、深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。——(维基百科)

2、void DFS(Agraph *g,int v){

             //采用的数据结构是栈,邻接表存储

              ArcNode *p;            

               int stack[maxsize],top=-1;

               int i,k;

               int visit[maxsize];//顶点访问标记数组

               for(i=0;in;++i)

                         visit[i]=0;

               visit(v);

               visit[v]=1;//标记起始顶点已被访问

               stack[++top]=v;//起始顶点入栈

               while(top!=-1){

                        k=stack[top];//取栈顶元素

                        p=g->adjlist[k].firstarc;//p指向该顶点的第一条边

                        while(p!=NULL&&visit[p->adjvex]==1)//当前p不是尾结点并且还有未被访问过的结点

                                  p=p->nextarc;

                        if(p==NULL)//如果p到达当前链表尾部,则说明当前顶点的所有点都已被访问过,当前顶点出栈

                                  --top;

                         else{

                             visit(p->adjvex);

                             visit[p->adjvex]=1;

                             stack[++top]=p->adjvex;

                        }

            }

}

                        

 

                                

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(图的深度优先遍历DFS(非递归C语言)邻接表存储)