鱼C论坛

 找回密码
 立即注册
查看: 2625|回复: 2

过河卒问题递归写法求助

[复制链接]
发表于 2021-6-12 15:49:10 | 显示全部楼层 |阅读模式
10鱼币
模仿马踏棋盘写了下过河卒问题,为什么只显示第一组解就中断了啊。
马踏棋盘这样写结果好像是对的。
a=[None]*25
p=[(1,2),(2,1),(2,-1),(1,-2),(-2,-1),(-1,-2),(-1,2),(-2,1)]
entry=(2,2)
s=0

def jiance(k):
    global a,p
    if a[k][0]<0 or a[k][0]>4 or a[k][1]<0 or a[k][1]>4:
        return 1
    if a[k] in a[:k]:
        return 1
    else:
        return 0

def zou(k):
    global a,p,s
    if k==25:
        print(a)
        s=s+1
    else:
        for i in p:
            a[k]=(a[k-1][0]+i[0],a[k-1][1]+i[1])
            if not jiance(k):
                zou(k+1)
   
a[0]=entry
zou(1)
print(s)

过河卒这样写不知道错在哪了?

n,m,cx,cy=5,5,2,3
bu=[(0,1),(1,0)]
chi=[(cx,cy),(cx+1,cy-2),(cx+2,cy-1),(cx+2,cy+1),(cx+1,cy+2),(cx-1,cy+2),(cx-2,cy+1),(cx-2,cy-1),(cx-1,cy-2)]

a=[None]*11
s=0

def jiance(k):
    global bu,chi,a,s
    for i in chi:
        if a[k][0]==i[0] and a[k][1]==i[1]:
            return 1
    return 0

def zou(k):
    global bu,chi,a,s,m,n
    if k==n+m+1 and a[k-1][0]==5 and a[k-1][1]==5 :
        print(a)
        s+=1
    else:
        for i in bu:
            a[k]=(a[k-1][0]+i[0],a[k-1][1]+i[1])
            if not jiance(k):
                zou(k+1)
   
a[0]=(0,0)
zou(1)
print(s)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-12 17:00:27 | 显示全部楼层
解决了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-12 17:01:41 | 显示全部楼层
解决了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表