org.jetbrains.kotlin.util.containerUtils.kt Maven / Gradle / Ivy
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.util
/**
* Perform BFS on the given collection with neighbors created by the given function.
*/
fun Collection.bfs(getNeighbors: (T) -> Iterator): Sequence {
val queue = ArrayDeque(this)
val visited = mutableSetOf()
return sequence {
while (queue.isNotEmpty()) {
val current = queue.removeFirst()
if (current in visited) continue
visited.add(current)
yield(current)
getNeighbors(current).forEach(queue::add)
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy