今天下午思考了几个小时,最后还是选择走.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