Label and enqueue every still-unlabelled neighbour of u.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(csr_t), | intent(in) | :: | adjacency |
Adjacency to read row |
||
| integer(kind=default_int), | intent(in) | :: | u |
Vertex whose neighbours are being visited |
||
| integer(kind=default_int), | intent(in) | :: | label |
Component label to assign |
||
| integer(kind=default_int), | intent(inout) | :: | component(:) |
Component labels, 0 where still unlabelled |
||
| integer(kind=default_int), | intent(inout) | :: | queue(:) |
Visit queue |
||
| integer(kind=default_int), | intent(inout) | :: | tail |
Index of the last used slot of |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=default_int), | private | :: | k | ||||
| integer(kind=default_int), | private | :: | v |
pure subroutine enqueue_neighbours(adjacency, u, label, component, queue, tail) !! Label and enqueue every still-unlabelled neighbour of `u`. type(csr_t), intent(in) :: adjacency !! Adjacency to read row `u` from integer(default_int), intent(in) :: u !! Vertex whose neighbours are being visited integer(default_int), intent(in) :: label !! Component label to assign integer(default_int), intent(inout) :: component(:) !! Component labels, 0 where still unlabelled integer(default_int), intent(inout) :: queue(:) !! Visit queue integer(default_int), intent(inout) :: tail !! Index of the last used slot of `queue` integer(default_int) :: k, v do k = adjacency%row_ptr(u), adjacency%row_ptr(u + 1) - 1 v = adjacency%col_idx(k) if (component(v) /= 0) cycle component(v) = label tail = tail + 1 queue(tail) = v end do end subroutine enqueue_neighbours