八皇后单解和全解递归算法(Lua实现)
2017-06-25 10:51
183 查看
单解递归算法
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) do if is_place_ok(n, a ) then break end a = a + 1 end if a <= N then a[n + 1] = 1 add_queen(n + 1) else -- 回溯 n = n - 1 a = a + 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 = 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()
相关文章推荐
- 八皇后问题的实现
- 用递归算法实现ASP程序用fso对硬盘上某个路径下目录和文件的遍历
- 递归算法实现阶乘计算
- Lua中实现类似C#的事件机制
- java实现的经典递归算法三例
- lua实现面向对象的特性
- 看了点lua相关的东西,有点想法不知能否实现?先记下来慢慢思考。
- 算法:【一列数的规则如下: 1、1、2、3、5、8、13、21、34 ,求第30位数是多少, 用递归算法实现。(C#语言)】
- 用java实现的经典递归算法
- 求集合子集,和全排列的递归算法实现(c++,Dev C++调试通过)
- 树相关操作的递归算法实现
- 用递归算法实现ASP程序用fso对硬盘上某个路径下目录和文件的遍历
- 实现一个递归算法
- 【原创源码】(03):利用简单递归算法,实现文本匹配、翻译。
- “八皇后”动态图形的VC实现
- 递归算法实现树型菜单
- 八皇后动态图形的实现
- 打靶(递归算法) | 八皇后(回溯算法)
- 用java实现的经典递归算法
- 八皇后(或n皇后)c++的一种求解实现