@@ -35,6 +35,7 @@ object DynamicSolver {
3535 val existingCandidateDoors = g.findFreeDoors(existingCandidateRooms(targetRoomOffset).uid)
3636 if (existingCandidateDoors.length > targetDoorOffset) {
3737 val nextDoor = existingCandidateDoors(targetDoorOffset)
38+ println(s " Connect room # ${input.roomFromUid} door ${input.doorIdx} to room ${nextDoor.roomUid}, door ${nextDoor.idx}" )
3839 StepApplied (
3940 g.connectRooms(input.roomFromUid, input.doorIdx, nextDoor.roomUid, nextDoor.idx),
4041 nextDoor
@@ -48,6 +49,7 @@ object DynamicSolver {
4849 if (freeRooms.length > freeRoomOffset) {
4950 val freeRoom = freeRooms(freeRoomOffset)
5051 val labeledGraph = g.setRoomLabel(freeRoom.uid, Some (input.roomToLabel))
52+ println(s " Connect room # ${input.roomFromUid} door ${input.doorIdx} to room ${freeRoom.uid}, door ${0 }" )
5153 StepApplied (
5254 labeledGraph.connectRooms(input.roomFromUid, input.doorIdx, freeRoom.uid, 0 ),
5355 DoorVertex (freeRoom.uid, 0 )
@@ -58,6 +60,7 @@ object DynamicSolver {
5860 }
5961 }
6062 case Some (linkedRoom) => {
63+ println(s " Room # ${input.roomFromUid} door ${input.doorIdx} was already connected to room # ${linkedRoom.uid} (label ${linkedRoom.label}) " )
6164 if (linkedRoom.label == Some (input.roomToLabel)) {
6265 val nextDoor = g.adjacentDoor(g.doors(input.roomFromUid)(input.doorIdx)).get
6366 StepApplied (g, nextDoor)
@@ -70,24 +73,32 @@ object DynamicSolver {
7073
7174 def processStepEnumerating (graph : MyGraph , inputs : Seq [LabelInput ], currentRoomUid : Int = 0 , roomOffset : Int = 0 , doorOffset : Int = 0 ) : SolverStepResult =
7275 if (inputs.length == 0 ) {
76+ println(" no inputs left" )
7377 StepApplied (graph, DoorVertex (currentRoomUid, 0 ))
7478 } else {
7579 val stepInput = StepInput (currentRoomUid, inputs.head.doorIdx, inputs.head.roomToLabel)
7680 val stepResult = processStep(graph, stepInput, roomOffset, doorOffset)
7781 stepResult match {
7882 case StepApplied (newGraph, door) =>
7983 println(f " Step into; remaining length is ${inputs.tail.length}" )
80- return processStepEnumerating(newGraph, inputs.tail, currentRoomUid = door.roomUid)
84+ val subResult = processStepEnumerating(newGraph, inputs.tail, currentRoomUid = door.roomUid)
85+ println(s " Returning from recursive call: $subResult" )
86+ subResult match {
87+ case StepApplied (_,_) => return subResult
88+ case _ =>
89+ println(s " Do rollback; remaining length is ${inputs.length}" )
90+ return processStepEnumerating(graph, inputs, currentRoomUid, roomOffset = roomOffset, doorOffset = doorOffset+ 1 )
91+ }
8192 case TargetDoorsExhausted () =>
8293 println(" Doors exhausted" )
83- return processStepEnumerating(graph, inputs, roomOffset+ 1 , 0 )
94+ return processStepEnumerating(graph, inputs, 0 , roomOffset+ 1 , 0 )
8495 case TargetRoomsExhausted () =>
8596 println(" Rooms exhausted" )
8697 return TargetRoomsExhausted ()
8798 case Contradiction () =>
8899 println(" Contradiction" )
89- return processStepEnumerating(graph, inputs, currentRoomUid, roomOffset = roomOffset, doorOffset = doorOffset+ 1 )
90- // return Rollback()
100+ // return processStepEnumerating(graph, inputs, currentRoomUid, roomOffset = roomOffset, doorOffset = doorOffset+1)
101+ return Rollback ()
91102 case Rollback () =>
92103 println(" Rollback" )
93104 return processStepEnumerating(graph, inputs, currentRoomUid, roomOffset = roomOffset, doorOffset = doorOffset+ 1 )
0 commit comments