您当前所在位置:首页攻略n皇后编程问题

n皇后编程问题

更新:2024-11-18 09:55:24编辑:游戏资讯归类:攻略

n皇后编程问题 是一个经典问题。在2018年,北京航空航天大学计算机学院的博士招聘上,出现了这个问题作为上机题目。以下是几种实现方法:

import time
import itertools

Num =  8
# Num = 12   # 8

def f1():
    # f1()函数实现
    ...

def f2():
    # f2()函数实现
    ...

def f3():
    # f3()函数实现
    ...

# 运行时间测试
...

上面的实现中,当n=8时,f1()函数实现、f2()函数实现、f3()函数实现的运行时间如下(单位为秒):

92
11.19756269454956
92
0.005673408508300781
92
0.019522428512573242

可以看到f1()函数的实现是f2实现的2000倍的用时,因此在下面的n=12时我们只给出f2()和f3()函数实现下的用时:

14200
4.591862201690674
14200
295.7449884414673

可以看到,f3()的实现下用时是f2()实现下的60倍。

总结:

f2()方法实现是运行时间最短的方法。

f3()方法是f2()用时的60倍。

f1()方法是f2()用时的2000倍。

不过在n=8时,也就是8皇后问题下,f2()和f3()的用时都是符合一般要求的(1秒以内或5秒以内)。

由于f2()中使用了yield,这一点并不通用,于是将其改为return,并加入sss=[ ]作为状态保存,具体代码如下:

import time
import itertools
 
Num =  8

 
def f2():
    # 修改后的f2()函数实现
    ...

不过考虑到即使把f2()中的yield改为return也是需要使用递归算法的,而递归算法是可以使用循环算法来替代的,于是使用循环算法修改f2()中的递归,得到如下代码:

import time
 
 
def f2():
    # 使用循环算法修改f2()中的递归
    ...

个人github博客地址:
https://devilmaycry812839668.github.io/

以上就是电脑114游戏给大家带来的关于n皇后编程问题全部内容,更多攻略请关注电脑114游戏。

电脑114游戏-好玩游戏攻略集合版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

Golang的GMP调度模型与源码解析 小桔充电app