博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#WPF实现回溯算法解决八皇后问题
阅读量:4317 次
发布时间:2019-06-06

本文共 4661 字,大约阅读时间需要 15 分钟。

运用C#WPF编程实现了经典的回溯算法解决“八皇后问题”

程序运行演示结果如下:

算法核心代码:

namespace nQueen{    ///     /// MainWindow.xaml 的交互逻辑    ///     public partial class MainWindow : Window    {        Queen[] queens;        int[] queenPosition;        Boolean[] isEnableColumn;        Boolean[] isEnableLeft;        Boolean[] isEnableRight;        int queenNumber;        ///         /// 构造函数        ///         public MainWindow()        {            queens = new Queen[8];            initAl(8);            InitializeComponent();            //drawGrid(8);        }        ///         /// 根据皇后数目绘制棋盘函数(暂不使用)        ///         /// 皇后数目        public void drawQueen()        {            for (int i = 0; i < queenNumber; i++)            {                setQueen(i, queenPosition[i]);            }        }        ///         /// 初始化算法数据        ///         ///         public void initAl(int number)        {            queenPosition = new int[number];            isEnableColumn = new Boolean[number];            for (int i = 0; i < number; i++) { isEnableColumn[i] = true; }            isEnableLeft = new Boolean[number * 2 - 1];            for (int i = 0; i < number * 2 - 1; i++) { isEnableLeft[i] = true; }            isEnableRight = new Boolean[number * 2 - 1];            for (int i = 0; i < number * 2 - 1; i++) { isEnableRight[i] = true; }            queenNumber = number;        }        ///         /// 设置皇后的位置,如果此皇后已经存在则改变皇后的位置        ///         /// 表示第几个皇后        /// 表示皇后所在的行数        /// 表示皇后所在的列数        public void setQueen(int row,int column)        {            if (queens[row] != null)            {                GridMain.Children.Remove(queens[row]);                GridMain.UnregisterName("queen" + row.ToString());            }            else            {                queens[row] = new Queen();            }            queens[row].Name = "queen" + row.ToString();            GridMain.Children.Add(queens[row]);            GridMain.RegisterName("queen" + row.ToString(), queens[row]);            Grid.SetRow(queens[row], row);            Grid.SetColumn(queens[row], column);        }        //public void deleteQueen(int queenSeq);        ///         /// 开始运算按钮事件        ///         ///         ///         private void button2_Click(object sender, RoutedEventArgs e)        {            setQueen( 5, 2);        }        ///         /// 初始化按钮事件        ///         ///         ///         private void startButton_Click(object sender, RoutedEventArgs e)        {            putQueen(0);            drawQueen();            //string output="";            //for (int i = 0; i < queenNumber; i++)            //{ output += queenPosition[i].ToString();            //output += "  ";            //}            //   MessageBox.Show(output);        }        ///         /// 放置皇后         ///         /// 放置第N行的皇后        public bool putQueen(int row)        {            if (row == queenNumber) { return true; }            for (int col = 0; col < queenNumber; col++)            {                                //判断此列是否可用(列,左对角线,右对角线均为true)                if (isEnableColumn[col] && isEnableLeft[row + col] && isEnableRight[row - col + queenNumber-1])                {                    queenPosition[row] = col;                    isEnableColumn[col] = false;                    isEnableLeft[row + col] = false;                    isEnableRight[row - col + queenNumber-1] = false;                    if(putQueen(row + 1))return true;                                        isEnableColumn[col] = true;                    isEnableLeft[row + col] = true;                    isEnableRight[row - col + queenNumber-1] = true;                }            }            return false;        }    }}

前台代码

转载于:https://www.cnblogs.com/wizholy/archive/2012/10/26/2742795.html

你可能感兴趣的文章
Laravel 的生命周期
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
jxl写入excel实现数据导出功能
查看>>
linux文件目录类命令|--cp指令
查看>>
.net MVC 404错误解决方法
查看>>
linux系统目录结构
查看>>
git
查看>>
btn按钮之间事件相互调用
查看>>
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
学习进度
查看>>