八皇后問題回溯算法演示系統

通過,幾天的學習研究,對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

picture2.jpg

picture3.jpg
源碼地址:http://download.csdn.net/source/1542352
本文來源於網絡小築 http://www.iwebtrados.com.cn/ , 原文地址:http://www.iwebtrados.com.cn/post/50.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章