zoukankan      html  css  js  c++  java
  • N-皇后问题的C#实现

     1 /*
     2             n-皇后问题:
     3          n皇后问题等于在n*n格的棋盘上防止彼此不受攻击的n个皇后,按照国际象棋的规则,皇后可以攻击与之
     4          处在同一行或同一列或同一斜线上的棋子,求解可以放置的方法种数。
     5         */
     6         private static int count = 0;
     7         static void Main(string[] args)
     8         {
     9             while (true)
    10             {
    11                 Console.WriteLine("请输入大于3的数,将会显示所有满足皇后问题的解...");
    12                 int n = Convert.ToInt32(Console.ReadLine());
    13                 List<int> queens = new List<int>();
    14                 for (int i = 0; i < n; i++)
    15                 {
    16                     queens.Add(0);
    17                 }
    18                 Console.WriteLine("{0}-皇后问题的解:",n);
    19                 PutQueens(queens, 0);
    20             }
    21         }
    22         /// <summary>
    23         /// 安排皇后位置是判断是否会相互攻击
    24         /// </summary>
    25         /// <param name="queens">皇后列表</param>
    26         /// <param name="current">当前皇后索引</param>
    27         /// <returns></returns>
    28         private static bool IsMatch(List<int> queens, int current)
    29         {
    30             for (int i = 0; i < current; i++)
    31             {
    32                 if (queens[i] == queens[current] || Math.Abs(queens[i] - queens[current]) == Math.Abs(i - current))
    33                 {
    34                     return false;
    35                 }
    36             }
    37             return true;
    38         }
    39         /// <summary>
    40         /// 放皇后
    41         /// </summary>
    42         /// <param name="queens">皇后列表</param>
    43         /// <param name="current">当前皇后索引</param>
    44         private static void PutQueens(List<int> queens,int current)
    45         {
    46             int n = queens.Count;
    47             for (queens[current] = 1; queens[current] <= n;queens[current]++ )
    48             {
    49                 if (IsMatch(queens, current))
    50                 {
    51                     //当前位置满足情况,不会被攻击,换下一个皇后进场
    52                     current++;
    53                     if (current < n)
    54                     {
    55                         PutQueens(queens, current);
    56                     }
    57                     else
    58                     {
    59                         count++;
    60                         Console.WriteLine("第{0}中方法:",count);
    61                         for (int i = 0; i < queens.Count; i++)
    62                         {
    63                             Console.Write(queens[i].ToString()+"  ");
    64                         }
    65                         Console.WriteLine();
    66                     }
    67                     //递归结束后current--,退出所有的递归current又变成0,进行下一轮
    68                     current--;
    69                 }
    70             }
    71         }
  • 相关阅读:
    多维DP UVA 11552 Fewest Flop
    思维/构造 HDOJ 5353 Average
    map Codeforces Round #Pi (Div. 2) C. Geometric Progression
    构造 Codeforces Round #Pi (Div. 2) B. Berland National Library
    贪心+优先队列 HDOJ 5360 Hiking
    贪心 HDOJ 5355 Cake
    LIS UVA 10534 Wavio Sequence
    又见斐波那契~矩阵快速幂入门题
    Big Christmas Tree(poj-3013)最短路
    poj 2449 Remmarguts' Date 第k短路 (最短路变形)
  • 原文地址:https://www.cnblogs.com/pushudepu/p/6005701.html
Copyright © 2011-2022 走看看