原本以为dfs肯定时间不够,还想要剪枝,但一看题目已经放水了,N、M是[1, 8]。我来个python版本的AC代码。
import sys


def str2list(string):
    res = []
    while string != '':
        res.append(int(string[0]))
        string = string[1:]
    return res


def dfs(mei, create, temp):
    if create == bai and not mei:
        res.append(temp)
    elif not mei:
        return
     else:
        # d
        dfs(mei[1:], create, temp + ['d'])
        # l
        dfs(mei[1:], [mei[0]] + create, temp + ['l'])
        # r
        dfs(mei[1:], create + [mei[0]], temp + ['r'])


data = sys.stdin.readlines()
num = len(data)
max_len = int(data[0].strip())


for i in range((num - 1) // 2):
    res = []
    flag = True
    mei = str2list(data[1 + i * 2].strip())
    bai = str2list(data[2 + i * 2].strip())
    print('{')
    for b in bai:
        if b not in mei:
            flag = False
    if not flag:
        print('}')
        continue
    dfs(mei, [], [])
    for j in range(len(res)):
        out = ''
        for s in res[j]:
            out += s + ' '
        print(out[:-1])
    print('}')