DFS深度优先搜索遍历和BFS广度优先搜索遍历

DFS深度优先搜索遍历的基本思想是:首先访问出发点v,并将其标记为已访问过,然后选取与v相邻的未被访问的任一个顶点w,并访问它;再选取与w邻接的未被访问的任一顶点并访问,以此反复进行。

BFS广度优先搜索遍历的基本思想是:首先访问起始顶点v,然后选取与v邻接的全部顶点w1、w2、...进行访问,再依次访问与w1、w2、...邻接的全部顶点(已经访问过的顶点除外),依次类推,知道全部顶点已经被访问过为止。

#include<stdio.h>

void DFS(ALGraph *G,int v)    //图以连接表存储,从顶点v开始遍历
{
	ArcNode *p;
	visit(v);               //访问顶点v
	visit[v] = 1;           //置已访问标记
	p = G->adjlist[v].firstarc;
	while(p != NULL){
		if(!visit[p->adjvex])
			DFS(G,p->adjvex);
		p = p->nextarc;		//p指向顶点v的下一条邻接边
	}
}

//广度优先搜索遍历需要借助一个队列
void BFS(ALGraph *G,int v)
{
	ArcNode *p;
	int que[MAXSIZE],front = 0,rear = 0;
	int j;
	Visit(v);
	vist[v] = 1;
	rear = (rear + 1) % MAXSIZE;
	que[rear] = v;
	while(front != rear){
		front = (front + 1) % MAXSIZE;
		j = que[front];
		p = G->adjlist[j].firstarc;
		while(p != NULL){
			if(!visit[p->adjvex]){
				Visit(p->adjvex);
				visit[p->adjvex] = 1;
				rear = (rear + 1) % MAXSIZE;
				que[rear] = p->adjvex;
			}
			p = p->nextarc;
		}
	}
}

  

转载于:https://www.cnblogs.com/strolling-leisurely/p/11553334.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值