烙印99
如果我理解正确的话,你需要数组来指示每个状态的下一个状态,具体取决于移动(右、左、上、下)。如果是这样,我猜你的退出执行state_r不正确。我建议切换到网格的 2D 表示,因为如果直接有 x 和 y (至少对我来说),您描述的很多事情会更容易、更直观地处理。import numpy as npn = 4states = np.arange(n*n).reshape(n, n)states_r, states_l, states_u, states_d = (states.copy(), states.copy(), states.copy(), states.copy())states_r[:, :n-1] = states[:, 1:]states_l[:, 1:] = states[:, :n-1]states_u[1:, :] = states[:n-1, :]states_d[:n-1, :] = states[1:, :]# up [[ 0, 1, 2, 3],# left state right [ 0, 1, 2, 3],# down [ 4, 5, 6, 7],# [ 8, 9, 10, 11]]## [[ 0, 0, 1, 2], [[ 0, 1, 2, 3], [[ 1, 2, 3, 3],# [ 4, 4, 5, 6], [ 4, 5, 6, 7], [ 5, 6, 7, 7],# [ 8, 8, 9, 10], [ 8, 9, 10, 11], [ 9, 10, 11, 11],# [12, 12, 13, 14]] [12, 13, 14, 15]] [13, 14, 15, 15]]## [[ 4, 5, 6, 7],# [ 8, 9, 10, 11],# [12, 13, 14, 15],# [12, 13, 14, 15]]如果你想排除终端状态,你可以这样做:terminal_states = np.zeros((n, n), dtype=bool)terminal_states[0, 0] = Trueterminal_states[-1, -1] = Truestates_r[terminal_states] = states[terminal_states]states_l[terminal_states] = states[terminal_states]states_u[terminal_states] = states[terminal_states]states_d[terminal_states] = states[terminal_states]如果您更喜欢一维方法:import numpy as npn = 4states = np.arange(n*n)valid_s = np.ones(n*n, dtype=bool)valid_s[0] = Falsevalid_s[-1] = Falsestates_r = np.where(np.logical_and(valid_s, states % n < n-1), states+1, states)states_l = np.where(np.logical_and(valid_s, states % n > 0), states-1, states)states_u = np.where(np.logical_and(valid_s, states > n-1), states-n, states)states_d = np.where(np.logical_and(valid_s, states < n**2-n), states+n, states)