写了一个工具,如下图所示,可以直接算出答案,这里提供一下代码和思路
import copy
result = []
def one_switch(start, switch_nums_list, end):
if not switch_nums_list:
# 判断两个数组是否相等
for p, q in zip(start, end):
if p != q:
return False
return True
switch_nums = switch_nums_list[0]
if isinstance(switch_nums, list):
# 选项
for j in switch_nums:
temp = copy.deepcopy(start)
for j_index in range(len(j)):
m = int(j[j_index]) - 1
n = j_index
temp[n] = start[m]
if one_switch(temp, switch_nums_list[1:], end):
result.append(j)
return True
else:
temp = copy.deepcopy(start)
for i_index in range(len(switch_nums)):
m = int(switch_nums[i_index]) - 1
n = i_index
temp[n] = start[m]
return one_switch(temp, switch_nums_list[1:], end)
# 非选项
return result
if __name__ == '__main__':
start = [1, 2, 3, 4]
switch = [['1342', '2341', '2431'], '1342']
end = [2, 4, 1, 3]
one_switch(start, switch, end)
print(result)