FIR: add bfs helper and use it
It's also used in Kotlin quickfixes in intellij repo
This commit is contained in:
committed by
Ilya Kirillov
parent
a11cd74b28
commit
6a59dc7fa5
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* 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 <T> Collection<T>.bfs(getNeighbors: (T) -> Iterator<T>): Sequence<T> {
|
||||
val queue = ArrayDeque(this)
|
||||
val visited = mutableSetOf<T>()
|
||||
return sequence {
|
||||
while (queue.isNotEmpty()) {
|
||||
val current = queue.removeFirst()
|
||||
if (current in visited) continue
|
||||
visited.add(current)
|
||||
yield(current)
|
||||
getNeighbors(current).forEach(queue::add)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user