图的遍历

深度优先搜索(DFS)

思路

一直往前走,如果不能往前则回溯,找上一个顶点没有被访问的,直到所有的顶点被访问
访问次序不确定
对于非连通图:在未访问过的顶点中在进行DFS,换了几次顶点,就可以知道有多少个连通分量

代码

	//G是图 
	void DFS(AM_Graph G,int v)	//v是要访问的结点 
	{
		cout<<v;
		visited[v]=true;	//因为访问了v,将v置0 
		//vex_num是顶点数
		//把邻接矩阵上所有的点都找了一遍 
		for(int w=0;w<G.vex_num;w++)
		{
			//邻接矩阵不为0并且没有访问过 
			if((G.arcs[v][w]!=0)&&(!visited[w]))
				DFS(G,w);//递归的进行遍历
		}
	}

广度优先遍历(BFS)

思路

从图的某一个结点出发,首先依次访问该结点的所有邻接点,再按照这些顶点被访问的先后次序依次访问与它们想邻接的所有被访问的顶点,直到所有结点被访问为止

代码

void BFS(AL_Graph G,int v)
	{
		cout<<v;
		visited[v]=true;	//访问过,置true 
		Queue<int> Q;	//队列 
		Q.enqueue(v);	//将访问的结点入队
		while(!Q.empty())	//栈非空
		{
			int u=dequeue(Q);	//出队,访问其邻接结点
			//将所有的邻接结点遍历一遍 
			for(Arc_Node m=G.vertices[w].first_arc;m!=NULL;m=m.next_arc)
			{
				int w=m.adj_vex;
				if(!visited[w])
				{
					cout<<w;
					visited[w]=true;	//w访问过,置于空 
					Q.enqueue(w);	//将w入队 
				}
			 } 
		} 
	 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值