码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-06 11:20:58      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:八皇后   算法   lua   

最近在学习Lua脚本,经过了不到十天的学习,也算是对语法有所了解吧,另外正好也看到了八皇后问题,感觉挺有意思的 就试了试用算法解出来。


八皇后问题的原题是:八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。


以下是lua的算法代码:

local eightQueen = { 0,0,0,0,0,0,0,0,}
local count = 0

function check(row,column)		--检查
	local data
	for i = 1,row do
		data = eightQueen[i]
		if column == data then						--同列
			return false
		elseif (i + data) == (row + column) then	--/斜线
			return false
		elseif (i - data) == (row - column) then	--\斜线
			return false
		end
	end
	return true
end

function eight_queen(row)
	for column = 1,8 do
		if check(row,column) == true then
			eightQueen[row] = column
			if row == 8 then 
				count = count + 1
				eightQueen[row] = 0
				return
			end
			eight_queen(row + 1)
			eightQueen[row] = 0
		end
	end
end

eight_queen(1)

print(count)

思路照抄百度百科的C++代码 C++代码如下:

#include<iostream>
using namespace std;
static int gEightQueen[8] = { 0 }, gCount = 0;
void print()//输出每一种情况下棋盘中皇后的摆放情况
{
    for (int outer = 0; outer < 8; outer++)
    {
        for (int inner = 0; inner < gEightQueen[outer]; inner++)
            cout << "#";
        for (int inner = gEightQueen[outer] + 1; inner < 8; inner++)
            cout << "";
        cout << endl;
    }
    cout << "==========================\n";
}
int check_pos_valid(int loop, int value)//检查是否存在有多个皇后在同一行/列/对角线的情况
{
    int index;
    int data;
    for (index = 0; index < loop; index++)
    {
        data = gEightQueen[index];
        if (value == data)
            return 0;
        if ((index + data) == (loop + value))
            return 0;
        if ((index - data) == (loop - value))
            return 0;
    }
    return 1;
}
void eight_queen(int index)
{
    int loop;
    for (loop = 0; loop < 8; loop++)
    {
        if (check_pos_valid(index, loop))
        {
            gEightQueen[index] = loop;
            if (7 == index)
            {
                gCount++, print();
                gEightQueen[index] = 0;
                return;
            }
            eight_queen(index + 1);
            gEightQueen[index] = 0;
        }
    }
}
int main(int argc, char*argv[])
{
    eight_queen(0);
    cout << "total=" << gCount << endl;
    return 0;
}

输出如下:

技术分享



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

标签:八皇后   算法   lua   

原文地址:http://blog.csdn.net/nxshow/article/details/44096569

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!