小弟请教一个非递归图的遍历问题
各位大虾,小弟在这遇到问题了现在想进行一个无向图的从一个指定结点进行图的深度搜索非递归遍历,用的数据结构是多重邻接表
小弟现在糊涂了,非递归遍历需要用到栈的操作,但是很是不太清楚其中的过程,搜索了很多,基本无果,因为多重邻接表的信息有点多,可能有点乱。还请各位大虾帮忙看看,先谢谢各位了!
程序代码:
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 编辑 ]