八皇后问题解析

  今天下午思考了几个小时,最后还是选择走.net,虽然java现在很火,但毕竟学了一学期c#了,本人还是比较细化wp的,所以最后选择了.net。我相信只要学精,不管以后就业如何,都应该差不到哪去。

  不扯远了,现在就来说一说八皇后问题。现在我还是大三学生,前几周上java实验课的时候我们实现了全排列问题,还剩一节课,老师就讲了下八皇后问题(就是在8×8的棋盘上,八个皇后两两不能在一条直线上),当时上课没认真听,下课去看有点看不懂,后来去看了其他博主的博文,更是看不懂,最后还是看老师写的代码。细细审看代码,感觉还是比网上的简单,可能是博主们没有写注释的习惯吧。

  代码如下:

  

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 八皇后
 8 {
 9     class Program
10     {
11         static int  n;
12         static int[] chess;//棋盘
13         static int total;//记录有多少种
14         static void Main(string[] args)
15         {
16             Console.WriteLine("请输入几皇后");
17             n = Convert.ToInt32(Console.ReadLine());
18             total = 0;
19             chess = new int[n];
20             queen(0);
21             Console.ReadKey();
22         }
23         public static void queen(int depth)
24         {
25             if (depth == n)//如果有完成一次棋盘
26             {
27                 total++;
28                 Console.WriteLine("" + total + "种解法:");
29                 for (int i=0;i< n; i++)
30                 {
31                    
32                     for(int j=0;j< n; j++)
33                     {
34                        Console.Write( chess[i] == j  ? "q" : "*");
35                     }
36                     Console.WriteLine();
37                 }
38 
39                 return;
40                 }
41             for (int i = 0; i < n; i++)//从第一排开始
42             {
43                 chess[depth] = i;
44                 if (CanJudge(depth))//如果不和其他皇后在一条直线上
45                 {
46                     queen(depth + 1);//进入下一排找皇后位置
47                 }
48             }
49         }
50         public static bool   CanJudge(int depth)//判断是不是在同一直线上
51         {
52            for(int i = 0; i < depth; i++)//判断已经在棋盘上的棋子
53             {
54                 if (chess[i] == chess[depth]|| Math.Abs(chess[i] - chess[depth]) == Math.Abs(i - depth))
55                 {
56                     return false;
57                 }
58                
59             }
60             return true;
61         }
62     }
63 }

  总的来说,八皇后问题对于技术大牛们都是小菜一碟,对于我们这些菜鸟来说还是有很多可以学习的

                                                                        2015-11-25

    原文作者:cy-97
    原文地址: https://www.cnblogs.com/zy-9798/p/4995719.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞