예제 #1
0
func (Svr *Solver) Move_right() {
	nRelative := (Svr.closeList.Back()).Value.(*Node)

	if nRelative.status == LEFT {
		return
	}
	nNode := new(Node)
	nNode.StateBoard = Get_StateBoard(Svr.nbrRow)
	nNode.status = RIGHT
	i, j := manhattan_3.Get_positionValue(nRelative.StateBoard, 0, Svr.nbrRow)
	if j == Svr.nbrRow-1 {
		return
	}
	Copy_Tab(nNode.StateBoard, nRelative.StateBoard, Svr.nbrRow)
	nNode.StateBoard[i][j] = nRelative.StateBoard[i][j+1]
	nNode.StateBoard[i][j+1] = 0
	Svr.AddNode(nNode, nRelative)
}
예제 #2
0
func (Svr *Solver) Move_top() {
	nRelative := (Svr.closeList.Back()).Value.(*Node)

	if nRelative.status == BOTTOM {
		return
	}
	nNode := new(Node)
	nNode.StateBoard = Get_StateBoard(Svr.nbrRow)
	nNode.status = TOP
	i, j := manhattan_3.Get_positionValue(nRelative.StateBoard, 0, Svr.nbrRow)
	if i == 0 {
		return
	}
	Copy_Tab(nNode.StateBoard, nRelative.StateBoard, Svr.nbrRow)
	nNode.StateBoard[i][j] = nRelative.StateBoard[i-1][j]
	nNode.StateBoard[i-1][j] = 0
	Svr.AddNode(nNode, nRelative)
}