失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 图的遍历(C语言 邻接表存储的图 - DFS 邻接矩阵存储的图 - BFS)

图的遍历(C语言 邻接表存储的图 - DFS 邻接矩阵存储的图 - BFS)

时间:2021-09-17 01:58:58

相关推荐

图的遍历(C语言 邻接表存储的图 - DFS 邻接矩阵存储的图 - BFS)

邻接表存储的图 - DFS

/* 邻接表存储的图 - DFS */void Visit( Vertex V ){printf("正在访问顶点%d\n", V);}/* Visited[]为全局变量,已经初始化为false */void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) ){/* 以V为出发点对邻接表存储的图Graph进行DFS搜索 */PtrToAdjVNode W;Visit( V ); /* 访问第V个顶点 */Visited[V] = true; /* 标记V已访问 */for( W=Graph->G[V].FirstEdge; W; W=W->Next ) /* 对V的每个邻接点W->AdjV */if ( !Visited[W->AdjV] ) /* 若W->AdjV未被访问 */DFS( Graph, W->AdjV, Visit ); /* 则递归访问之 */}

邻接矩阵存储的图 - BFS:

/* 邻接矩阵存储的图 - BFS *//* IsEdge(Graph, V, W)检查<V, W>是否图Graph中的一条边,即W是否V的邻接点。 *//* 此函数根据图的不同类型要做不同的实现,关键取决于对不存在的边的表示方法。*//* 例如对有权图, 如果不存在的边被初始化为INFINITY, 则函数实现如下: */bool IsEdge( MGraph Graph, Vertex V, Vertex W ){return Graph->G[V][W]<INFINITY ? true : false;}/* Visited[]为全局变量,已经初始化为false */void BFS ( MGraph Graph, Vertex S, void (*Visit)(Vertex) ){/* 以S为出发点对邻接矩阵存储的图Graph进行BFS搜索 */Queue Q;Vertex V, W;Q = CreateQueue( MaxSize ); /* 创建空队列, MaxSize为外部定义的常数 *//* 访问顶点S:此处可根据具体访问需要改写 */Visit( S );Visited[S] = true; /* 标记S已访问 */AddQ(Q, S); /* S入队列 */while ( !IsEmpty(Q) ) {V = DeleteQ(Q); /* 弹出V */for( W=0; W<Graph->Nv; W++ ) /* 对图中的每个顶点W *//* 若W是V的邻接点并且未访问过 */if ( !Visited[W] && IsEdge(Graph, V, W) ) {/* 访问顶点W */Visit( W );Visited[W] = true; /* 标记W已访问 */AddQ(Q, W); /* W入队列 */}} /* while结束*/}

如果觉得《图的遍历(C语言 邻接表存储的图 - DFS 邻接矩阵存储的图 - BFS)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。