| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 743 人关注过本帖
标题:小弟请教一个非递归图的遍历问题
只看楼主 加入收藏
cnsongzi
Rank: 1
来 自:安徽合肥
等 级:新手上路
帖 子:27
专家分:6
注 册:2010-10-2
结帖率:50%
收藏
 问题点数:0 回复次数:0 
小弟请教一个非递归图的遍历问题
各位大虾,小弟在这遇到问题了

现在想进行一个无向图的从一个指定结点进行图的深度搜索非递归遍历,用的数据结构是多重邻接表

小弟现在糊涂了,非递归遍历需要用到栈的操作,但是很是不太清楚其中的过程,搜索了很多,基本无果,因为多重邻接表的信息有点多,可能有点乱。还请各位大虾帮忙看看,先谢谢各位了!
程序代码:
void DFS(AMLGraph *g,int v)        //深度优先搜索遍历(递归)
{
   Edgenode *p;
   visited[v]=1;    //标志v已被访问
   cout<<v<<"     ";
   int i=v;
   p=g->adjmulist[v].firstedge;//取v边表的头指针,使P指向firstedge
   while(p!=NULL)//依次搜索v的邻接点
   {
       if(p->ivex==i)
       {
           if(visited[p->jvex]==0)    //邻近点未被访问过
           {  
               cout<<"<"<<v<<","<<p->jvex<<">";
               cout<<"\n";
               DFS(g,p->jvex);   //递归调用
             
           }
           p=p->ilink;
       }
       else
       {
           if(visited[p->ivex]==0)
           {
               cout<<"<"<<v<<","<<p->ivex<<">";
               cout<<"\n";
               DFS(g,p->ivex);    //递归调用
             
           }
           p=p->jlink;       }
   } 

}

数据结构——多重邻接表

typedef struct Edgenode{
  
   bool mark;  //访问标记
   int ivex,jvex; //一条边所依附的两个顶点的位置
   struct Edgenode *ilink,*jlink;
   
}Edgenode;  //邻接表中的节点类型
typedef struct Vexnode{
   int  data;  //顶点信息
   Edgenode *firstedge;  //指向第一个边节点
}Vexnode;  //表头节点类型
typedef struct{
   Vexnode adjmulist[MAX_VERTEX_NUM];
   int vexnum,edgenum;  //邻接多重表类型,图的顶点数和边数
}AMLGraph;
int visited[MAX_VERTEX_NUM];//全局变量visited,0表示未被访问过,1表示已被访问过







[ 本帖最后由 cnsongzi 于 2012-6-7 15:20 编辑 ]
搜索更多相关主题的帖子: visit 
2012-06-07 15:19
快速回复:小弟请教一个非递归图的遍历问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049958 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved