首页 > 编程语言 >n皇后编程问题

n皇后编程问题

时间:2024-11-17 19:20:34浏览次数:1  
标签:f2 return 编程 问题 range num time 皇后 queens

n皇后编程问题是一个经典问题,记得2018年北京航空航天大学计算机学院的博士招聘的上机题目就是这个,这里给出几种实现方法:

import time
import itertools

Num =  8
# Num = 12   # 8

def f1():
    def test_queens(queens):
        for x in range(Num):
            for y in range(x+1, Num):
                if abs(queens[x]-queens[y])==abs(x-y):
                    return False
        return True
    
    counter = 0
    for i in range(12345678, 87654321, 1):
        s = str(i)
        if "0" in s or "9" in s:
            continue
        if len(set(s)) != 8:
            continue
        if test_queens([int(digit)-1 for digit in s]):
            counter += 1
    return counter


def f2():
    def conflict(state, nextX):
        nextY = len(state)
        for i in range(nextY):
            if abs(state[i]-nextX) in (0, nextY-i):
                return True
        return False

    def queens(num=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, )):
                        yield (pos, ) + result

    return queens()


def f3():
    num = Num
    def conflict(queen):
        for x in range(num):
            for y in range(x+1, num):
                if abs(queen[x]-queen[y])==(y-x):
                    return True
        return False

    queens = []
    for queen in itertools.permutations(range(num)):
        if not conflict(queen):
            queens.append(queen)
    return queens


_a = time.time()
print(f1())
_b = time.time()
print(_b - _a)


_a = time.time()
print(len([x for x in f2()]))
_b = time.time()
print(_b - _a)


_a = time.time()
print(len([x for x in f3()]))
_b = time.time()
print(_b - _a)

上面的实现中,当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秒以内)。



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

标签:f2,return,编程,问题,range,num,time,皇后,queens
From: https://www.cnblogs.com/xyz/p/18550935

相关文章

  • 模板——实现泛型编程的有力武器
    模板——实现泛型编程的有力武器我们为什么需要模板?模板前言:关于模板,相信大家都有所而闻,以下是我对C++模板的个人看法,希望能够帮助到你们呀!我们为什么需要模板?  请到大家看这一段代码?voidSwap(int&left,int&right){inttemp=left;left=right;r......
  • “合肥-六安”编程活动选拔赛
    **T1**科丁星球和地球建立了外邦关系。地球的数字使用的计数方法是“逢十进一”。但是科丁星球的数字使用的计数方法是“逢九进一”。将地球数字正整数n转换成对应的科丁星球数字的过程:将n除以9,得到的商继续除以9,将余数存储起来,直到其商为0时结束运算。最后将得到的所有......
  • 【原创】PREEMPT-RT 系统cpu使用率周期飙高问题
    PREEMPT-RT系统某些应用场景syscpu使用率周期CPU飙高问题目录PREEMPT-RT系统某些应用场景syscpu使用率周期CPU飙高问题背景现象复现条件原因解决措施背景在22年进行PREEMPT-RT系统问题的调试时,之前文章在CPU性能优化小记-使用火焰图定位性能问题只是定位解决了其中一个问题,还......
  • 记录一次我重装系统后,装蓝牙驱动的问题
    一直搜索不到我手机和耳机,然后我用360驱动大师和驱动总裁都分别试了更新了驱动,还是搜索不到。驱动总裁:首先我试了驱动总裁里边这个版本:结果还是搜索不到,然后我用“驱动卸载备份工具DriverStoreExplorer”,完全卸载了我蓝牙相关的驱动:又重装驱动总裁的另外一个蓝牙驱动版本:......
  • Java集合框架高频面试问题精粹(下篇)
    书接上回,上一篇文章介绍了Java集合常见面试题全解(上),反响不错,也有很多同学发表了自己的观点,这次又来了,这次是Java集合常见面试题总结(下)了,主要讲解了Map集合原理,它的使用频率也是很高。那么它的存储结构和实现原理是怎么样的呢一、Collections工具类(不重要)Collections 工......
  • 读代码真的能让你成为更好的程序员吗?深入解析编程学习的正确方法
    开篇问候大家好,我是hikktn!从去年开始直播写代码后,许多粉丝就不断向我提出这样的问题:“你的代码能不能分享给我们学习?”他们并不是为了窃取商业机密,而是希望通过阅读代码,提升自己的编程能力。还有一些粉丝希望我推荐优秀的开源软件,下载后通过研究代码来获得启发。每次遇......
  • BFS 算法专题(三):BFS 解决边权为 1 的最短路问题
    目录1.迷宫中离入口最近的出口 1.1算法原理1.2算法代码2.最小基因变化★★★2.1算法原理2.2算法代码3.单词接龙3.1算法原理3.2算法代码4.为高尔夫比赛砍树(hard)4.1算法原理 4.2算法代码1.迷宫中离入口最近的出口 .-力扣(LeetCode)1.1算......
  • 编程语言的对比
    首先是编程语言的发音:我以前把python发音错读作飞人。因为单词物理physics的phy发音读飞,所以我把python的py也读飞,其实应该读派。then发音读人,所以我把python的thon也读人,其实应该读森。所以python应该读派森,而不是读作飞人。python是编程语言排行榜第一的语言。C#有个井号,所......
  • 7、GIC介绍与编程
    1.1GIC介绍ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断......
  • 解决 PbootCMS 网站转移后无法打开报错提示“No input file specified”的问题
    确保所有文件路径正确无误。检查 index.php 文件确保 index.php 文件存在于网站根目录中,并且路径正确。检查其他配置文件确保 config.php 和其他配置文件路径正确。查看错误日志查看服务器日志,获取更多详细的错误信息。PHP错误日志通常位于 /var/log......