Я читаю материалы, связанные с графом в Структурах данных и алгоритмах в С++ 4e (автор Адам Дроздек). В его реализации Graph Breadth First Search псевдокод выглядит так:
BFS():
for all vertices u
num(u) = 0
edges = null
i = 1
while there is a vertex v such that num(v) is 0
num(v)++
enqueue(v)
while queue is not empty
v = dequeue()
if num(u) is 0
num(u) = i++
enqueue(u)
attach edge(v,u) to edges
output edges
По сути, в реализации графа мы уже храним набор всех вершин и набор всех ребер. В BFS алгоритм сначала перечисляет каждую вершину, не посещенную в этом наборе, чтобы пройти весь граф.
Мой вопрос таков: поскольку мы уже храним все вершины в наборе, мы можем перебирать набор для работы с определенной вершиной без использования алгоритма BFS. Зачем нужен алгоритм обхода графа и в чем его основное применение?