C#递归求解八皇后

    很久没更新Blog了,开始玩玩算法吧,用递归写了一下八皇后,不知道是不是最优方案,继续研究其他的解法,尝试下回朔,代码如下

    
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;
        }

    }

}


 
      执行结果(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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值