アルゴリズムの8皇后問題をさかのぼります.

6836 ワード

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace SeqListSort

{

    /// <summary>

    /// 8    

    /// <ather>

    /// <lihonglin>

    /// </ather>

    /// </summary>

    class EightQueen

    {

        private const int COL = 8;//  

        private const int ROW = 8;

        private static int[,] map = new int[COL, ROW];//   

        private static int Count = 0;//          



        //     

        public static void PutQueen(int row)

        {

            int i = 0;

            if (ROW == row)//    

            {

                Display();

                return;

            }



            //       

            for (i = 0; i < COL; ++i )

            {

                if (IsOK(row, i))

                {

                    map[row, i] = 8;

                    PutQueen(row+1);

                    //   

                    map[row, i] = 0;

                }

            }

        }

        //     

        public static bool IsOK(int x, int y)

        {

            for (int i = 0; i < COL; i++)

            {

                for (int j = 0; j < ROW; ++j)

                {

                    //    ,   ,   ,              

                   if (i == x || j == y || (x + y == i + j) || ( x - y == i - j))

                   {

                        if (8 == map[i,j])

                        {

                            return false;

                        }

                       

                   }



                }

            }

            return true;

        }



        public static void Display()

        {

            Count++;

            Console.WriteLine ("  {0}  " , Count);

            for (int i = 0; i < COL; i++)

            {

                for (int j = 0; j < ROW; ++j)

                {

                    

                    Console.Write( "  "+ map[i,j] );

                }

                Console.WriteLine();

            }

        }

    }

}