八皇后单解和全解递归算法(Lua实现)

麻将胡牌递归算法(lua) 麻将胡牌算法 运用递归思路,先找出两张一样的牌作将牌,然后在剩下的牌中找顺子和三个一样的牌,当剩余的牌数为0,则排定可以胡牌。目前只是四川麻将的赢牌番型,除去风牌的。可自行进行扩展。(万:11-19,筒:21-29,条31-39),直接可以下载使用。 mjwintable类: --赢牌倍率 gMJWinRate = { 1, 2, 4, 4, 4, 4, 8, 8, 8, 16, 16,... 阅读详情

单解递归算法

local file = io.open('output.txt', 'w')

io.output(file)


local N = 8

local a = {}  

local times = 0


local function is_place_ok(n, c) -- n >=1 and n <= 8
    for i = 1, n - 1 do
        if (a[i] == c) or (math.abs(a[i] - c) == math.abs(n - i)) then
            return false
        end
    end
    return true
end



local function show()
    times = times + 1
    io.write('Times ', times, '\n')
    for i = 1, N do
        for j = 1, N do 
            if a[i] == j then
                io.write('X ')
            else 
                io.write('- ')
            end
        end
        io.write('\n')
    end
end



local function add_queen(n)
    if n > N then
        show()
    else

        while (a[n] <= N)
        do
            if is_place_ok(n, a[n]) then
                break
            end
            a[n] = a[n] + 1
        end

        if a[n] <= N then
            a[n + 1] = 1
            add_queen(n + 1)
        else

            -- 回溯
            n = n - 1
            a[n] = a[n] + 1
            add_queen(n)
        end
    end
end


local function init()
    for i = 1, N do
        a[i] = 1    -- lua 中index从1开始
    end
end


init();
add_queen(1)

io.close()

全解递归算法

local file = io.open('output.txt', 'w')

io.output(file)


local N = 8

local a = {}  

local times = 0


local function is_place_ok(n, c) -- n >=1 and n <= 8
    for i = 1, n - 1 do
        if (a[i] == c) or (math.abs(a[i] - c) == math.abs(n - i)) then
            return false
        end
    end
    return true
end



local function show()
    times = times + 1
    io.write('Times ', times, '\n')
    for i = 1, N do
        for j = 1, N do 
            if a[i] == j then
                io.write('X ')
            else 
                io.write('- ')
            end
        end
        io.write('\n')
    end
end



local function add_queen(n)
    if n > N then
        show()
    else
        for c = 1, N do
            if is_place_ok(n, c) then
                a[n] = c
                add_queen(n + 1)
            end
        end 
    end
end


local function init()   
    for i = 1, N do
        a[i] = 1  -- lua 中index从1开始
    end
end


init();
add_queen(1)

io.close()
Lua程序设计(二)-八皇后问题 Eight-queen puzzle目标是把8个皇后合理的摆放在棋盘上,使得每个皇后之间都不能互相攻击。 对于这样的一道问题我们首先可以将国际象棋棋盘抽象为一个8*8的矩阵。目标就是把8个皇后放在这样一个矩阵中,使得他们互相之间不能攻击(横向,竖向,对角线)。 分析这个问题,不难发现当我们摆放一个棋子后,对应的问题规模即可摆放棋子的位置变小了,但是摆放棋子的思路确并不会改变都是需要我们去尝... 阅读详情

相关推荐

八皇后问题:单个解和全解

自己写的代码,求解八皇后问题的单一解及全部解。写得并不好,不过还是小结下。 为了自己中途调试的直观,声明char chess[8][8],这个变量用来存放棋盘的实时状态,其中“*”表示空白的棋格,“Q”表示放置了皇后的棋格,所以比如说其中的一个解就表示成这样: #include #include int back_row[8],back_column[8]; void qu

camford的专栏 3883

lua 实现八皇后(回溯法和全排列法)

分别使用回溯法和全排列解决。

reedthink的博客 394

Lua中的递归函数写法实例

主要介绍了Lua中的递归函数写法实例,本文直接给出代码实例,并作了简洁注释,需要的朋友可以参考下

用lua解决八皇后问题

文章目录     要解决八皇后问题,首先必须认识到每一行中只能有一个皇后。因此,可以用一个由8个数字组成的简单数组来表示可能的解决方案。例如,数组{3,7,2,1,8,6,5,4}表示皇后在棋盘中的位置分别是(1,3)、(2,7)、(3,2)、(4,1)、(5,8)、(6,4)、(7,5)和(8,4)。当然,这个示例并不是一个正确的解,例如(3,2)中的皇后就可以攻击(4,1)中的皇后。此外,我们...

567

全球、中国各省市县等行政区划(含十段线)shape及geosjon数据免费下载

免费下载全球、中国各省市县等行政区划(含十段线)shape及geosjon数据

mhf403445651的博客 3460

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 830

Lua递归小记

Lua递归学习笔记,用于自己理解。 -- 普通递归 function fibon1(n) if n < 3 then return 1 end return fibon1(n-2) + fibon1(n-1) end -- 尾递归 local function fibon_(n, n1, n2) if n == 0 or n == 1 then return n1 end return fibon_(n-1, n2, n

qq_31841025的博客 589

基于SOEM的伺服电机控制实战:从配置到调试

本文详细介绍了基于SOEM的伺服电机控制实战,从硬件配置到软件调试的全过程。通过分享PDO映射、状态机控制、性能优化等核心技巧,帮助开发者快速掌握EtherCAT通信与伺服电机控制的关键技术,提升工控系统开发效率。

weixin_29165465的博客 520

Lua解决八皇后问题

最近在学习lua,阅读Programing in Lua,里面很好了给出了Lua解决八皇后问题的代码。 为了记录一下自己的心得以及自己的理解防止之后忘记,决定写个帖子方便自己回顾。 N=8 --棋盘大小为8×8 flag=false --为了只输出一次看的清楚,true代表以有解 --判断(n,c)位置能否放皇后 function canplace(a,n,c) for i=1,n-1 do --遍历每一个已经放置的皇后 --a[i]是指第i行的皇后位置

PLZ000的博客 305

协方差矩阵

对两个类内协方差矩阵进行对角化,可以将它们变换为对角矩阵。这个过程可以通过对每个协方差矩阵进行特征值分解来实现,从而得到它们的特征向量和特征值,进而得到它们的对角矩阵形式。这个过程的意义在于,它可以帮助我们找到一个新的坐标系,使得在这个坐标系下,每个特征之间都是独立的,从而简化了计算。具体来说,当我们使用对角协方差矩阵作为特征向量的坐标系时,它意味着每个特征之间都是相互独立的,从而方便了进一步的分析和处理。在实际应用中,对角化协方差矩阵可以用于降维、特征选择和分类等任务。

m0_55196097的博客 1万+

Pixhawk+OpenMV实战:如何用Apriltag实现无人机自动降落(附避坑指南)

本文详细介绍了如何利用Pixhawk飞控和OpenMV摄像头,通过Apriltag视觉标签实现无人机的精准降落系统。从硬件搭建、参数配置到视觉处理代码优化,提供了完整的实战指南和避坑建议,帮助开发者快速实现厘米级精度的自动降落功能。

weixin_27076351的博客 481

lua中的递归函数

先看例子吧: function foo(i) --1 print("i: ", i) return i end do --local foo; --2 local foo = function (i) --3 if i < 1 then return 1 else return i * foo(i - 1) --4 end end local a = foo(4)

专注,努力,勤奋 9235

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1684

lua函数递归

我们先从一个错误的实例开始我们的讨论 local fact = function (n) if n == 0 then return 1 else return n*fact(n-1) end 上面这种方式导致 Lua 编译时遇到 fact(n-1)并不知道他是局部函数 fact,Lua 会去查找是否有这样的全局函数 fact。为了解决这个问题我们必须在定义函数以前先声明

Sped GO! 6813

MIPI D-PHY TX 一致性测试实例解析 Part 02

如果测过1.3.x,并对这组测试的细节已经熟悉的前提下,1.4.x的测试将会变得轻松,因为几乎相同的测试项被用于时钟通道的数据测量。

一只豌豆象的博客 8316

PDD psnl_verification anti_content 生成顺序与环境校验说明

K不是明文 URL,而是从当前href再派生出来的一小段摘要值。页面 URL 变,K会跟着变但K不是直接肉眼可读的 URL 字串可以把它理解成“URL 的短摘要字段”。这一步是最容易被误解的地方。它吃进去的是压缩后的中间串不是直接吃环境字段它内部还带有长度预算 / 字符映射 / 位置处理逻辑所以最终看到的环境字段 bytes协议头deflate 压缩自定义编码多层叠加后的结果。先把字段总包做再把压缩结果转成raw再拼fTail最后走做字符级输出因此,当前看到的协议字段流。

码王吴彦祖的博客 69

lua递归函数的编写,为了解决一个游戏当中遇到的复杂问题

一. 需求: 传入一个道具id,递归地判断它的获取途径里的其中一个道具是否可以从商店购买得到,如果可以,则返回true,否则返回false 先弄清楚道具的获取途径: 1. 通过商店购买、关卡掉落、xx店获得 2. 由1个道具进化而来 3. 由1个道具染色而来,但是可选的范围可能有N种道具 4. 由N个道具合成而来 但是,还有更复杂的几种情况要考虑: 1.

sonikk的专栏 2588

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Lua 八皇后问题

1.什么是八皇后问题? 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。不知道你们玩过国际象棋没有。皇后在国际象棋中是非常重要的棋子,因为她的移动范围很广,比车,和象都要广,可以横竖走,斜着也可以走,一般死掉皇后,基本就输了。因为每一行都有8种可能,所以一共可能解是8*8*8*8*8*8*8*8所以要想人...

maozhuxigood 250

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【算法】用Lua解决八皇后的问题

最近在学习Lua脚本,经过了不到十天的学习,也算是对语法有所了解吧,另外正好也看到了八皇后问题,感觉挺有意思的 就试了试用算法解出来。 八皇后问题的原题是:八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 以下是lua的算法代码:

NxShow的博客 1551

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

lua用递归方法实现求阶乘数

递归是什么,递归怎么运行呢? 递归其实就是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。 一般来说递归其实就是在运行中调用自己。 那么阶乘的公式是n X (n-1) 记住0的阶乘数为1. 做阶乘必须先写一个函数。 然后用if(如果)的判断语法。 a0是判断a是否等于零的意思。 这个是过程 return1我们先放在一边不管我们先说return anumber (a-1) 这就...

flowerX2的博客 863

Lua初识(6)_递归与迭代

递归:程序调用自身的编程技巧称为递归,是函数自己调用自己。一个函数在其定义中直接或间接调用自身的一种方法。它通常把一个大型的复杂的问题转化为一个与原问题相似 的规模较小的问题来解决,可以极大的减少代码量。 迭代:         让程序对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。迭代是某个变量的重复推算,而递归是自身对自身

taotaoahui 4436

lua函数互相调用、递归调用

在定义局部递归函数( rec ursive local function )时,由于原来的方法不适用,所以有一 点是极易出错的。考虑如下的代码: local fact = function (n) if n == 0 then return 1 else return n * fact(n-1) --有问题 end end 当Lua 语言编译...

钟离默的个人博客 1397

Lua学习笔记之八皇后问题

目录 1、博客介绍 2、内容 3、推送 4、结语 1、博客介绍 lua学习笔记之一,Lua版八皇后问题的写法,回溯算法的典型案例,编辑器使用Sublime 注:本篇博客所有源码摘自Lua程序设计(第四版)梅隆魁译 2、内容 --检查(n,c)是否不会被攻击 function isplaceok(a,n,c) for i=1,n-1 do if (a[i] == ...

孙君的空间站 599

学习lua之递归

爬楼梯 一次走1阶或者2阶。打印出爬楼梯过程 例子 爬3楼 111 12 21三种爬方式 递归代码 local q={0,0,0,0,0,0,0,0,0}; local x=3; num=1; print("ANSWER") function A(n) if(n==x)then for j,v in ipairs(q) do if(v~=0)then print(v

webgpu 1312

lua解决八皇后问题

项目写了一年的游戏逻辑脚本,发现算法知识有待加强,正好今天1024节日,打算练习下算法,于是查看了经典的把皇后问题,思路是不难,只是发现以前的c语言都不会写了,编译出很多问题,才发现用脚本语言开发的效率和快速,感觉算法这东西重在思想,c语言很多编译的细节错误可能找半天发现才是某个i,j写错了(对于初级的我经常犯这错误),可是用脚本语言就很简单,或者说是很方便查找这个问题,对于编译型语言,有时候因为这

猪会飞 524

Lua实现八皇后问题

Lua实现八皇后问题: -- 检查(n, c)是否不会被攻击,回溯思想 function isplaceok(a,n,c) --n行,C列 for i=1,n-1 do --在第n行位置,行数迭代,因此需要考虑的是列,正对角线,反对角线 if (a[i]==c)or(a[i]-i==c-n)or(a[i]+i==c+n) then --(a[i]==c)是否同一列,(a[...

a834595603的博客 389
上一篇: 八皇后单解和全解递归算法
下一篇: 从零开始学Scala系列(六)之类(Classes)和对象(Objects)
rodbate
博客等级 码龄11年 17粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值