8皇后問題遞迴求解

來源:互聯網
上載者:User

代碼說話

using System;
using System.Collections.Generic;
using System.Text;

namespace N皇后問題
{
    class Recursion
    {
        static int queen_count ;
        static int[] rows;
        static int[] cross_left;
        static int[] cross_right;
        static int[] result;

        static void Main(string[] args)
        {
            //使用遞迴的方式求解N皇后問題
            while (true)
            {
                while (!get_input())
                {
                    get_input();
                }

                rows = new int[queen_count];
                cross_left = new int[2 * queen_count - 1];
                cross_right = new int[2 * queen_count - 1];
                result = new int[queen_count];
                DateTime start = DateTime.Now;
                put_queen(0);
                TimeSpan used_time = (TimeSpan)(DateTime.Now - start);
                Console.WriteLine();
                Console.WriteLine(queen_count.ToString() + " 皇后的解為 :");
                for (int queen = 0; queen < result.Length; queen++)
                {
                    Console.Write(result[queen].ToString());//結果產生
                    Console.Write(" ");
                }
                Console.WriteLine();
                Console.WriteLine("消耗時間: " + used_time.TotalSeconds.ToString() + " 秒");
                Console.ReadLine();
            }
        }

        static bool get_input()
        {
            Console.Clear();
            Console.WriteLine("使用遞迴方法求解N皇后問題的一組解, 請輸入皇后個數( 4< N <= 50 ) : ");
            string str_n = Console.ReadLine();

            if (string.IsNullOrEmpty(str_n))
            {
                error();
                return false;
            }

            if (!int.TryParse(str_n, out queen_count))
            {
                error();
                return false;
            }

            if (queen_count < 4 || queen_count > 50)
            {
                error();
                return false;
            }
            return true;
        }
        static void error()
        {
            Console.WriteLine("請輸入正確的數字!");
            System.Threading.Thread.Sleep(1000);
        }
        static bool put_queen(int q_x)//列位置
        {
            if (q_x == (queen_count -1))
            {
                for (int k = 0; k < queen_count; k++)
                {
                    if (canput((queen_count - 1), k))
                    {
                        result[(queen_count - 1)] = k;
                        return true;
                    }
                }
                return false;
            }

            for (int des_y = 0; des_y < queen_count; des_y++)//當前行位置
            {
                if (canput(q_x, des_y))
                {
                    rows[des_y] = 1;
                    cross_left[des_y - q_x + queen_count -1] = 1;
                    cross_right[des_y + q_x] = 1;
                    result[q_x] = des_y;

                    if (put_queen(q_x + 1))
                        return true;
                    else
                    {
                        rows[des_y] = 0;
                        cross_left[des_y - q_x + queen_count -1] = 0;
                        cross_right[des_y + q_x] = 0;
                    }
                }
                else
                    continue;
            }

            return false;

        }
        static bool canput(int x, int y)
        {
            if (rows[y] == 1)
                return false;

            if (cross_left[y - x + queen_count -1] == 1)
                return false;

            if (cross_right[y + x] == 1)
                return false;

            return true;
        }
    }
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.