码迷,mamicode.com
首页 > 编程语言 > 详细

回溯算法之8皇后问题

时间:2015-03-02 06:07:07      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

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();
            }
        }
    }
}

 

回溯算法之8皇后问题

标签:

原文地址:http://www.cnblogs.com/lihonglin2016/p/4307867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!