八皇后問題(C#版)

算法:算法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;spa

namespace 八皇后
{
  class Program
  {
    int sum = 0; //定義是八皇后算法結果第幾個結果
    int[] Queens = new int[8]; //定義皇后的值
    static void Main(String[] args)
    {
      Program q = new Program();
      q.QueenSort(0);
    }
    public void QueenSort(int num)
    {
      for (int j = 1; j < 9; j++)
      {
        if (num == 8)
        {
          sum++;
          Write(); break;
        }
        if (Conflict(num, j))
        {
          Queens[num] = j;
          QueenSort(num + 1);
        }
      }
    }
    public bool Conflict(int row, int queen)
    {
      if (row == 0)
      {
        return true;
      }
      else
      {
        for (int n = 0; n < row; n++)
        {
          if (!Compare(Queens[n], row - n, queen))
          {
            return false;
          }
        }
        return true;
      }
    }
    public bool Compare(int lastqueen, int difference, int nowqueen)
    {
      if (lastqueen == nowqueen || lastqueen - nowqueen == difference || nowqueen - lastqueen == difference)
      {
        return false;
      }
      else
      {
        return true;
      }
    }
    public void Write() //輸出結果
    {
      Console.WriteLine("第{0}種皇后排列組合:", sum);
      for (int i = 0; i < 8; i++)
      {
        Console.Write(Queens[i]); //輸出結果是皇后所在的位置blog

        /*
        for (int j = 1; j < 9; j++) //輸出結果棋盤
        {
          if (j== Queens[i])
          {
            Console.Write("■");
          }
          else
          {
            Console.Write("□");
          }
        }
        */
      }
      Console.Write("\n");
    }
  }
}it

截圖(部分結果):io

相關文章
相關標籤/搜索