Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- buscaEmProfundidadeDe: origem para: destino jaVisitados: visitados
- |cx mx cy my|
- origem = destino ifTrue: [
- ^self
- ].
- visitados add: origem.
- cx := origem at: 1.
- mx := origem at: 2.
- cy := 3 - cx.
- my := 3 - mx.
- 1 to: 2 do: [:t|
- (cx >= t and: [my = 0 or: [my - cy >= t]]) ifTrue: [
- self travessiaDeCanibais: t de: origem para: destino
- jaVisitados: visitados
- ].
- (mx >= t and: [(mx - t = 0) | (mx - t >= cx)
- and: [(cy = 0) | (cy - my <= t)]]) ifTrue: [
- self travessiaDeMissionarios: t de: origem para: destino
- jaVisitados: visitados
- ].
- ].
- (cx >= 1 and: [mx >= 1 and: [(cy = 0) | (cy <= my)]]) ifTrue: [
- self travessiaDeUmCanibalUmMissionarioDe: origem para: destino
- jaVisitados: visitados
- ]
- travessiaDeCanibais: t de: origem para: destino
- jaVisitados: visitados
- |cx mx cy my meio margemDoBarco|
- cx := origem at: 1.
- mx := origem at: 2.
- cy := 3 - cx.
- my := 3 - mx.
- meio := origem copy.
- meio at: 1 put: cy + t.
- meio at: 2 put: my.
- (origem at: 3) = #direita ifTrue: [
- meio at: 3 put: #esquerda
- ] ifFalse: [
- meio at: 3 put: #direita
- ].
- grafo conecta: origem a: meio rotulo: (Array with: t with: 0).
- (visitados includes: meio) ifFalse: [
- self buscaEmProfundidadeDe: meio para: destino
- jaVisitados: visitados.
- ]
- travessiaDeMissionarios: t de: origem para: destino
- jaVisitados: visitados
- |cx mx cy my meio margemDoBarco|
- cx := origem at: 1.
- mx := origem at: 2.
- cy := 3 - cx.
- my := 3 - mx.
- meio := origem copy.
- meio at: 1 put: cy.
- meio at: 2 put: my + t.
- (origem at: 3) = #direita ifTrue: [
- meio at: 3 put: #esquerda
- ] ifFalse: [
- meio at: 3 put: #direita
- ].
- grafo conecta: origem a: meio rotulo: (Array with: 0 with: t).
- (visitados includes: meio) ifFalse: [
- self buscaEmProfundidadeDe: meio para: destino
- jaVisitados: visitados.
- ]
- travessiaDeUmCanibalUmMissionarioDe: origem para: destino
- jaVisitados: visitados
- |cx mx cy my meio margemDoBarco|
- cx := origem at: 1.
- mx := origem at: 2.
- cy := 3 - cx.
- my := 3 - mx.
- meio := origem copy.
- meio at: 1 put: cy + 1.
- meio at: 2 put: my + 1.
- (origem at: 3) = #direita ifTrue: [
- meio at: 3 put: #esquerda
- ] ifFalse: [
- meio at: 3 put: #direita
- ].
- grafo conecta: origem a: meio rotulo: (Array with: 1 with: 1).
- (visitados includes: meio) ifFalse: [
- self buscaEmProfundidadeDe: meio para: destino
- jaVisitados: visitados.
- ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement