图的遍历:DFS/BFS

前言

还是自用版,选择一套简洁的自己记忆下来,伪码哦

正文

存储结构

首先是存储结构,一般常用到的是邻接矩阵邻接表

邻接矩阵
#define MaxSize 100;
typedef char VertseType;
typedef int EdegeType;
typedef struct{
    VertseType Vex[MaxSize];//顶点信息表
    EdegeType  Edge[MaxSize][MaxSize];//邻接矩阵,边表
    int vexnum,arcnum;//图的当前顶点数和弧数
}MGraph
邻接表
#define MaxSize 100
typedef struct ArcNode{     //边表结点
	int adjvex;             //该弧所指向顶点的位置
	struct ArcNode *nextarc;//指向下一条弧的指针
}ArcNode
typedef struct VNode{      //顶点表结点
	VertseType data;       //顶点信息
	ArcNode *firstarc;    //指向第一条依附在该结点的指针
}VNode,AdjList[MaxSize];
typedef struct{
	AdjList vertices;
	int vexnum,arcnum;
}ALGraph

DFS遍历

图的深度搜索遍历,类似于二叉树的先序遍历,
用邻接表表示时,时间复杂度为O(|v|+|E|)
用邻接矩阵表示时,时间复杂度为O(|v|2)

void DFSTraverse(ALGraph G)
{
    for(v=0;v<G.vexnum;v++)
        visited[v]=false;
    for(v=0;v<G.vexnum;v++)
        if(!visited[v])
            DFS(G,v);
}
bool visited[MaxSize];
void DFS(ALGraph G,int v){
	visited[v]=true;
	ArcNode *p;
	visit(v);//访问该结点
	p=G.vertices[v].firstarc;
	while(p){
		int w=p.adjvex;
		if(visted[w]==false)//若该结点未被访问
            DFS(G,w);//循环遍历
        p=p->nextarc;/获得下一边结点
	}
}

BFS遍历

图的广度搜索遍历,类似于二叉树的层序遍历
用邻接表表示时,时间复杂度为O(|v|+|E|)
用邻接矩阵表示时,时间复杂度为O(|v|2)

void BFSTraverse(ALGraph G)
{
    for(v=0;v<G.vexnum;v++)
        visited[v]=false;
    for(v=0;v<G.vexnum;v++)
        if(!visited[v])
            BFS(G,v);
}
bool visited[MaxSize];
void BFS(ALGraph G,int v){
	 initQueue(Q);//初始化队列
	 ArcNode *p;
	 visit(v);//访问该结点
	 visited[v]=true;
	 EnQueue(Q,v);//入队
	 while(!isEmpty(Q)){
	 	DeQueue(Q,v);//出队
	 	p=G.vertices[v].firstarc;
	 	while(p){
	 		int w=p->adjvex;
	 		if(visited[w]==false){//若该结点未被访问
	 			visit(w);
	 			EnQueue(Q,w);
	 		    visited[w]=true;
			 }
		    p=p->nextarc;//获得下一边结点
		 }
	 }
}

贴一个有详细代码的文章https://blog.csdn.net/qq_42845341/article/details/101929645

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值