!MUDMobile methodsFor:'brain'!
bfsRoom: aRoom
" Breadth First Search for a Room - resulting in an MUDExit object or nil "
| visited queued where togo |
where := self location.
where = aRoom ifTrue: [ ^ nil ].
visited := Set new.
queued := SharedQueue new.
visited add: where.
where exits do: [ :e | e direction = aRoom ifTrue: [ ^ e ].
(visited includes: e direction) ifFalse: [ queued nextPut: e. queued nextPut: e ] ].
[ queued isEmpty not ] whileTrue: [
visited add: where.
where := queued next direction.
togo := queued next.
where exits do: [ :e | e direction = aRoom ifTrue: [ ^ togo ].
(visited includes: e direction) ifFalse: [ queued nextPut: e. queued nextPut: togo ] ] ].
^ nil
! !