八皇后问题(c#版) 5

设计程序完成如下要求:在8×8的国际象样棋盘上,放置8个皇后,使得这8个棋子不能互相被对方吃掉。要求:1)依次输出各种成功的放置方法。2)最好能画出棋盘的图形形式,并在其... 设计程序完成如下要求:在8×8的国际象样棋盘上,放置8个皇后,使得这8个棋子不能互相被对方吃掉。
要求: 
1)依次输出各种成功的放置方法。2)最好能画出棋盘的图形形式,并在其上动态地演示试探过程。
展开
 我来答
Ben
2012-12-25 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
/*
* 八皇后问题
* @Author: Red_angelX
*/
class Program
{
const int NCOUNT = 8;

static int[] QueenMap = new int[NCOUNT];

static int iCount = 1;

static void Main(string[] args)
{
int current = System.Environment.TickCount;

PlayQueen(0);

Console.WriteLine("Eclped {0} ms", Environment.TickCount - current);
Console.Read();
}

/*
* 核心函数,放置第N枚皇后(递归)
*/
static void PlayQueen(int n)
{
if (n == NCOUNT)
{
PrintResult();
return;
}

for (int i = 1; i <= NCOUNT; i++)
{
QueenMap[n] = i;
if (IsValid(n))
PlayQueen(n + 1);
}

}

/*
* 输出结果
*/
static void PrintResult()
{
Console.Write("No.{0} ", iCount++);

for (int i = 0; i < NCOUNT; i++)
Console.Write("{0} ", QueenMap[i]);
Console.Write(" ");
}

/*
* 检查第n个皇后放上去之后是否合法
*/
static bool IsValid(int n)
{
for (int i = 0; i < n; i++)
{
if (QueenMap[i] == QueenMap[n])
return false;

if (Math.Abs(QueenMap[i] - QueenMap[n]) == n - i)
return false;
}
return true;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式