圖的非遞歸深度優先搜索(鄰接表存儲)

   鄰接表

//邊表
typedef struct ArcNode  
{
	int adjvex;                //該邊所指向的結點的位置 
	struct ArcNode *nextarc;   //指向下一條邊的指針 
	int info;                  //該邊的相關信息(如權值) 
}ArcNode;
//頂點表
typedef struct   
{
	char data;                 //頂點信息 
	ArcNode *firstarc;         //指向第一條邊的指針 
}VNode;
typedef struct
{
	VNode adjlist[maxSize];    //鄰接表 
	int n,e;                   //頂點數和邊數 
}AGraph;

 


void DFS(AGraph *g,int v)
{
	ArcNode *p;
	int stack[maxSize],top=-1;
	int visit[maxSize];
	for(int i=0;i<g->n;++i)
		visit[i]=0;
	Visit(v);
	visit[v]=1;
	stack[++top]=v;
	while(top!=-1)
	{
		int k=stack[top];
		p=g->adjlist[k].firstarc;
		while(p!=NULL&&visit[p->adjvex]==1)
			p=p->nextarc;
		if(p==NULL)
			--top;
		else
		{
			Visit(p->adjvex);
			visit[p->adjvex]=1;
			stack[++top]=p->adjvex;
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章