很久没更新Blog了,开始玩玩算法吧,用递归写了一下八皇后,不知道是不是最优方案,继续研究其他的解法,尝试下回朔,代码如下
执行结果(Release版本):
using
System;
using System.Collections.Generic;
using System.Text;
namespace Queen
{
/*
* 八皇后问题
* @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;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace Queen
{
/*
* 八皇后问题
* @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;
}
}
}
执行结果(Release版本):
No.
1
1
5
8
6
3
7
2
4
No. 2 1 6 8 3 7 4 2 5
No. 3 1 7 4 6 8 2 5 3
No. 4 1 7 5 8 2 4 6 3
No. 5 2 4 6 8 3 1 7 5
No. 6 2 5 7 1 3 8 6 4
No. 7 2 5 7 4 1 8 6 3
No. 8 2 6 1 7 4 8 3 5
No. 9 2 6 8 3 1 4 7 5
No. 10 2 7 3 6 8 5 1 4
No. 11 2 7 5 8 1 4 6 3
No. 12 2 8 6 1 3 5 7 4
No. 13 3 1 7 5 8 2 4 6
No. 14 3 5 2 8 1 7 4 6
No. 15 3 5 2 8 6 4 7 1
No. 16 3 5 7 1 4 2 8 6
No. 17 3 5 8 4 1 7 2 6
No. 18 3 6 2 5 8 1 7 4
No. 19 3 6 2 7 1 4 8 5
No. 20 3 6 2 7 5 1 8 4
No. 21 3 6 4 1 8 5 7 2
No. 22 3 6 4 2 8 5 7 1
No. 23 3 6 8 1 4 7 5 2
No. 24 3 6 8 1 5 7 2 4
No. 25 3 6 8 2 4 1 7 5
No. 26 3 7 2 8 5 1 4 6
No. 27 3 7 2 8 6 4 1 5
No. 28 3 8 4 7 1 6 2 5
No. 29 4 1 5 8 2 7 3 6
No. 30 4 1 5 8 6 3 7 2
No. 31 4 2 5 8 6 1 3 7
No. 32 4 2 7 3 6 8 1 5
No. 33 4 2 7 3 6 8 5 1
No. 34 4 2 7 5 1 8 6 3
No. 35 4 2 8 5 7 1 3 6
No. 36 4 2 8 6 1 3 5 7
No. 37 4 6 1 5 2 8 3 7
No. 38 4 6 8 2 7 1 3 5
No. 39 4 6 8 3 1 7 5 2
No. 40 4 7 1 8 5 2 6 3
No. 41 4 7 3 8 2 5 1 6
No. 42 4 7 5 2 6 1 3 8
No. 43 4 7 5 3 1 6 8 2
No. 44 4 8 1 3 6 2 7 5
No. 45 4 8 1 5 7 2 6 3
No. 46 4 8 5 3 1 7 2 6
No. 47 5 1 4 6 8 2 7 3
No. 48 5 1 8 4 2 7 3 6
No. 49 5 1 8 6 3 7 2 4
No. 50 5 2 4 6 8 3 1 7
No. 51 5 2 4 7 3 8 6 1
No. 52 5 2 6 1 7 4 8 3
No. 53 5 2 8 1 4 7 3 6
No. 54 5 3 1 6 8 2 4 7
No. 55 5 3 1 7 2 8 6 4
No. 56 5 3 8 4 7 1 6 2
No. 57 5 7 1 3 8 6 4 2
No. 58 5 7 1 4 2 8 6 3
No. 59 5 7 2 4 8 1 3 6
No. 60 5 7 2 6 3 1 4 8
No. 61 5 7 2 6 3 1 8 4
No. 62 5 7 4 1 3 8 6 2
No. 63 5 8 4 1 3 6 2 7
No. 64 5 8 4 1 7 2 6 3
No. 65 6 1 5 2 8 3 7 4
No. 66 6 2 7 1 3 5 8 4
No. 67 6 2 7 1 4 8 5 3
No. 68 6 3 1 7 5 8 2 4
No. 69 6 3 1 8 4 2 7 5
No. 70 6 3 1 8 5 2 4 7
No. 71 6 3 5 7 1 4 2 8
No. 72 6 3 5 8 1 4 2 7
No. 73 6 3 7 2 4 8 1 5
No. 74 6 3 7 2 8 5 1 4
No. 75 6 3 7 4 1 8 2 5
No. 76 6 4 1 5 8 2 7 3
No. 77 6 4 2 8 5 7 1 3
No. 78 6 4 7 1 3 5 2 8
No. 79 6 4 7 1 8 2 5 3
No. 80 6 8 2 4 1 7 5 3
No. 81 7 1 3 8 6 4 2 5
No. 82 7 2 4 1 8 5 3 6
No. 83 7 2 6 3 1 4 8 5
No. 84 7 3 1 6 8 5 2 4
No. 85 7 3 8 2 5 1 6 4
No. 86 7 4 2 5 8 1 3 6
No. 87 7 4 2 8 6 1 3 5
No. 88 7 5 3 1 6 8 2 4
No. 89 8 2 4 1 7 5 3 6
No. 90 8 2 5 3 1 7 4 6
No. 91 8 3 1 6 2 5 7 4
No. 92 8 4 1 3 6 2 7 5
Eclped 94 ms
No. 2 1 6 8 3 7 4 2 5
No. 3 1 7 4 6 8 2 5 3
No. 4 1 7 5 8 2 4 6 3
No. 5 2 4 6 8 3 1 7 5
No. 6 2 5 7 1 3 8 6 4
No. 7 2 5 7 4 1 8 6 3
No. 8 2 6 1 7 4 8 3 5
No. 9 2 6 8 3 1 4 7 5
No. 10 2 7 3 6 8 5 1 4
No. 11 2 7 5 8 1 4 6 3
No. 12 2 8 6 1 3 5 7 4
No. 13 3 1 7 5 8 2 4 6
No. 14 3 5 2 8 1 7 4 6
No. 15 3 5 2 8 6 4 7 1
No. 16 3 5 7 1 4 2 8 6
No. 17 3 5 8 4 1 7 2 6
No. 18 3 6 2 5 8 1 7 4
No. 19 3 6 2 7 1 4 8 5
No. 20 3 6 2 7 5 1 8 4
No. 21 3 6 4 1 8 5 7 2
No. 22 3 6 4 2 8 5 7 1
No. 23 3 6 8 1 4 7 5 2
No. 24 3 6 8 1 5 7 2 4
No. 25 3 6 8 2 4 1 7 5
No. 26 3 7 2 8 5 1 4 6
No. 27 3 7 2 8 6 4 1 5
No. 28 3 8 4 7 1 6 2 5
No. 29 4 1 5 8 2 7 3 6
No. 30 4 1 5 8 6 3 7 2
No. 31 4 2 5 8 6 1 3 7
No. 32 4 2 7 3 6 8 1 5
No. 33 4 2 7 3 6 8 5 1
No. 34 4 2 7 5 1 8 6 3
No. 35 4 2 8 5 7 1 3 6
No. 36 4 2 8 6 1 3 5 7
No. 37 4 6 1 5 2 8 3 7
No. 38 4 6 8 2 7 1 3 5
No. 39 4 6 8 3 1 7 5 2
No. 40 4 7 1 8 5 2 6 3
No. 41 4 7 3 8 2 5 1 6
No. 42 4 7 5 2 6 1 3 8
No. 43 4 7 5 3 1 6 8 2
No. 44 4 8 1 3 6 2 7 5
No. 45 4 8 1 5 7 2 6 3
No. 46 4 8 5 3 1 7 2 6
No. 47 5 1 4 6 8 2 7 3
No. 48 5 1 8 4 2 7 3 6
No. 49 5 1 8 6 3 7 2 4
No. 50 5 2 4 6 8 3 1 7
No. 51 5 2 4 7 3 8 6 1
No. 52 5 2 6 1 7 4 8 3
No. 53 5 2 8 1 4 7 3 6
No. 54 5 3 1 6 8 2 4 7
No. 55 5 3 1 7 2 8 6 4
No. 56 5 3 8 4 7 1 6 2
No. 57 5 7 1 3 8 6 4 2
No. 58 5 7 1 4 2 8 6 3
No. 59 5 7 2 4 8 1 3 6
No. 60 5 7 2 6 3 1 4 8
No. 61 5 7 2 6 3 1 8 4
No. 62 5 7 4 1 3 8 6 2
No. 63 5 8 4 1 3 6 2 7
No. 64 5 8 4 1 7 2 6 3
No. 65 6 1 5 2 8 3 7 4
No. 66 6 2 7 1 3 5 8 4
No. 67 6 2 7 1 4 8 5 3
No. 68 6 3 1 7 5 8 2 4
No. 69 6 3 1 8 4 2 7 5
No. 70 6 3 1 8 5 2 4 7
No. 71 6 3 5 7 1 4 2 8
No. 72 6 3 5 8 1 4 2 7
No. 73 6 3 7 2 4 8 1 5
No. 74 6 3 7 2 8 5 1 4
No. 75 6 3 7 4 1 8 2 5
No. 76 6 4 1 5 8 2 7 3
No. 77 6 4 2 8 5 7 1 3
No. 78 6 4 7 1 3 5 2 8
No. 79 6 4 7 1 8 2 5 3
No. 80 6 8 2 4 1 7 5 3
No. 81 7 1 3 8 6 4 2 5
No. 82 7 2 4 1 8 5 3 6
No. 83 7 2 6 3 1 4 8 5
No. 84 7 3 1 6 8 5 2 4
No. 85 7 3 8 2 5 1 6 4
No. 86 7 4 2 5 8 1 3 6
No. 87 7 4 2 8 6 1 3 5
No. 88 7 5 3 1 6 8 2 4
No. 89 8 2 4 1 7 5 3 6
No. 90 8 2 5 3 1 7 4 6
No. 91 8 3 1 6 2 5 7 4
No. 92 8 4 1 3 6 2 7 5
Eclped 94 ms