模拟考试遇到的一个问题,求解

img

img


这是考试遇到的一个问题,由于没有正确答案,想知道解法,所以发帖寻求帮助

原题里定义的子函数有两句缩进不对

def route(p):
    flag=False
    if q[p]==0:
        s="0"
        i=p
        while pre[i]!=-1:
            s=str(q[pre[i]])+"-->"+s
            i=pre[i]
        print(s)
        flag=True
    return flag
n=int(input("请输入传球人数:"))
m=int(input("请输入传球次数:"))
print("传球方案为:")
pre=[0]*2**(m+1)
q=[0]*2**(m+1)
head=tail=0
pre[0]=-1
q[tail]=0
tail+=1
i=0;sum=0
while i<m:
    for j in range(2**i):
        q[tail]=(q[head]+1)%n
        q[tail+1]=(q[head]+n-1)%n
        pre[tail]=head
        pre[tail+1]=head
        if i==m-1:
            if route(tail):
                sum+=1
            if route(tail+1):
                sum+=1
        tail=tail+2
        head+=1
    i+=1
print("共有方案数:",sum)