mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 06:07:20 +08:00 
			
		
		
		
	* feat(vertex): add a vertex pkg * feat(graph): add graph_bfs in go * feat(graph): add graph_dfs in go * fix(graph): fix comment * fix(graph): fix graph_adj_list * fix(go/graph): fix graph_adjacency * fix(c): gitignore * feat(graph): print order adjList graph * fix(graph): remove order print * Update graph_adjacency_list_test.go * Update .gitignore * Update .gitignore --------- Co-authored-by: Yudong Jin <krahets@163.com>
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// File: graph_bfs.go
 | 
						|
// Created Time: 2023-02-18
 | 
						|
// Author: Reanon (793584285@qq.com)
 | 
						|
 | 
						|
package chapter_graph
 | 
						|
 | 
						|
import (
 | 
						|
	. "github.com/krahets/hello-algo/pkg"
 | 
						|
)
 | 
						|
 | 
						|
/* 广度优先遍历 BFS */
 | 
						|
// 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点
 | 
						|
func graphBFS(g *graphAdjList, startVet Vertex) []Vertex {
 | 
						|
	// 顶点遍历序列
 | 
						|
	res := make([]Vertex, 0)
 | 
						|
	// 哈希表,用于记录已被访问过的顶点
 | 
						|
	visited := make(map[Vertex]struct{})
 | 
						|
	visited[startVet] = struct{}{}
 | 
						|
	// 队列用于实现 BFS, 使用切片模拟队列
 | 
						|
	queue := make([]Vertex, 0)
 | 
						|
	queue = append(queue, startVet)
 | 
						|
	// 以顶点 vet 为起点,循环直至访问完所有顶点
 | 
						|
	for len(queue) > 0 {
 | 
						|
		// 队首顶点出队
 | 
						|
		vet := queue[0]
 | 
						|
		queue = queue[1:]
 | 
						|
		// 记录访问顶点
 | 
						|
		res = append(res, vet)
 | 
						|
		// 遍历该顶点的所有邻接顶点
 | 
						|
		for _, adjVet := range g.adjList[vet] {
 | 
						|
			_, isExist := visited[adjVet]
 | 
						|
			// 只入队未访问的顶点
 | 
						|
			if !isExist {
 | 
						|
				queue = append(queue, adjVet)
 | 
						|
				visited[adjVet] = struct{}{}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	// 返回顶点遍历序列
 | 
						|
	return res
 | 
						|
}
 |