DFS遍历图

 
  
 
//DFS遍历有向图
//采用十字链表存储结构  
//2017.3.30
//lovesunmoonlight 
#include
#include
#include
#include
#include
#include

using namespace std;

#define MAX_VERTEX_NUM 20

struct ArcBox;

queue order;
 
//表头结点 
typedef struct VexNode
{
	ArcBox *firstin,*firstout;
	double data;
}VexNode;

//边结点 
typedef struct ArcBox
{
	int tailvex,headvex;
	ArcBox *hlink,*tlink; //hlink指向head相同的下一条边,tlink指向tail相同的下一条边 
	double data;
}ArcBox;

//图定义
typedef struct
{
	VexNode xlist[MAX_VERTEX_NUM]; //表头数组 
	int vexnum,arcnum; //顶点数和边数 
}OLGraphy; 

//初始化图 
void initialGraphy(OLGraphy& g,int vexnum,int arcnum)
{
	g.vexnum=vexnum;
	g.arcnum=arcnum;
	for(int i=0;i>etail;
		cout<<"终点:"; 
		cin>>ehead;
		--etail;
		--ehead;
		ArcBox* p=(ArcBox*)malloc(sizeof(ArcBox));
		p->tailvex=etail;
		p->headvex=ehead;
		
		//指向当前顶点的第一条出边和入边 
		p->hlink=g.xlist[ehead].firstin;
		p->tlink=g.xlist[etail].firstout;
		p->data=rand()%100; 
		
		//更新顶点的第一条出边和入边 
		g.xlist[ehead].firstin=p;
		g.xlist[etail].firstout=p;
	}
	 
} 

void DFS(const OLGraphy& g,int v,bool visited[])
{
	//完成当前节点的访问 
	visited[v]=true;
	order.push(v+1);
	cout<<"结点编号:"<tailvex; //以v为头的边,遍历与之相连的结点 
		if(!visited[next])
			DFS(g,next,visited);
		temp1=temp1->hlink;
	}
	while(temp2)
	{
		int next=temp2->headvex; //以v为尾的边,遍历与之相连的结点 
		if(!visited[next])
			DFS(g,next,visited);
		temp2=temp2->tlink;
	}		
}
int main()
{
	OLGraphy g;
	int vexnum,arcnum;
	cout<<"输入顶点数和边数:\n";
	cout<<"顶点数:";
	cin>>vexnum;
	cout<<"边数:";
	cin>>arcnum;
	cout<"<
DFS遍历图_第1张图片

你可能感兴趣的:(algorithm)