首页 > 编程 > Python > 正文

Python八皇后问题的学习体会与分析-递归的运用

2019-11-09 20:49:29
字体:
来源:转载
供稿:网友
这是教材上的代码:
def conflict(state, nextX):    nextY = len(state)    for i in range(nextY):        if abs(state[i]-nextX) in (0, nextY-i):           return True    return Falsedef queens(num, state=()):    #PRint num,state    for pos in range(num):        if not conflict(state, pos):                    if len(state) == num-1:                         yield (pos,)                    else:                         for result in queens(num, state+(pos,)):                              #生成八或N个的元组                              yield (pos, ) + result

分析一:

1.此种方法看上去较酷,感到很高大上的编程。占用内存小,运用了生成器。

2.教材上讲了如果不能安排好下一下皇后,则进行上一个皇后的位置改变,再迭代。但我感觉是究举之后的依次判断,即列出所有可能的位置组合,再进行一一判断。

3.可以先理解,用递归实理的N层迭代。如下代码

def my_func(num, state=()):        for i in range(9):        print i,         if len(state) == num-1:            yield (len(state),)            #print "len state",len(state)        else:           for result in my_func(num, state+(0,)):                yield (len(state),)+result                print "resault....",resulta=list(my_func(8))

4.用递归实现的N层迭代:

def test(num,state=()):    print "start.",    for i in range(num):        print i,        if len(state)==num-1:            yield (100,)        else:            for result in test(num,state+(0,)):                    print "in."                    print "recur...len result is:  ",len(result),result                    yield (50,)+resulta=list(test(4))print len(a)print a两个yield很关键,第一个是结束递归的条件,第一个,生成N个的元组,练习时可以改i,为POS,就像八皇后了。5.理解了4.对于八皇后,就更易理解了。加了对冲突的判断,即便是要找的解了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表