通过,几天的学习研究,对c#绘图的基本的应用已经有了一定的了解,因此决定写一个程序检验一下学习的成果。恰好,本人一直在研究算法,虽然水平不是很高,但是也经常和一些朋友探讨。有些刚刚学习算法的人往往因为对算法的执行过程没有直观的认识,因此我就萌生了做算法演示系统的想法。
       这次做的算法演示,是八皇后问题的回溯算法。想当年我也是费了好大劲才掌握回溯算法,因此,很渴望有一个软件能够帮助到大家,不知道我做的这个软件对你们是否有帮助。
       首先,让我们看一下这个问题的描述。八皇后问题说的是在8*8国际象棋棋盘上,要求在每一行放置一个皇后,且能做到在竖方向,斜方向都没有冲突。更通用的描述就是有没有可能在一张N*N的棋盘上安全地放N个皇后?
让我们回忆下,八皇后问题的回溯算法,我的博文有c语言描述的算法实现http://www.iwebtrados.com.cn/post/19.html。具体的算法描述,大家google一下吧:)。
       C#版本的回溯算法如下:
           class q
    {
        const int n=8;
        int[] x = new int[n];
        int count;
        public void dosearch()
        {
            traceback(0);
            System.Windows.Forms.MessageBox.Show(count.ToString());
        }
        private bool CanSet(int t)
        {
            for (int i = 0; i < t; i++)
            {
                if (x[i] == x[t] || System.Math.Abs(x[t] - x[i]) == t - i)
                    return false;
            }
            return true;
        }
        private void
            traceback(int t)
        {
            if (t >= n)
            {
                count++;
                return;
            }
            for (int i = 0; i &lt; n; i++)
            {
                x[t] = i;
                if (CanSet(t))
                    traceback(t + 1);
            }
        }
    }
       现在我要做一个算法,演示算法的执行过程。这里用到前面GDI+学习系列的知识。如在bitmap上作图,防屏幕刷新。也有一些新的东西,如截取部分图片并保存,多线程后台执行等。
       对于八皇后问题我们知道有92种合法的布局,本演示系统提供保存合法布局为jpg文件的功能,保存的内容在可执行文件夹下,以picture+序号为文件名,如第一个搜索的布局保存的文件名是picture1.jpg。下面给出几个布局文件。

Picture1.jpg 

picture1.jpg

Picture2.jpg

picture2.jpg

Picture3.jpg

picture3.jpg
源码地址:http://download.csdn.net/source/1542352
本文来源于网络小筑 http://www.iwebtrados.com.cn/ , 原文地址:http://www.iwebtrados.com.cn/post/50.html