您的位置:首页 > 其它

GDI+学习(7) 八皇后问题回溯算法演示系统

2009-07-25 21:00 369 查看
通过,几天的学习研究,对c#绘图的基本的应用已经有了一定的了解,因此决定写一个程序检验一下学习的成果。恰好,本人一直在研究算法,虽然水平不是很高,但是也经常和一些朋友探讨。有些刚刚学习算法的人往往因为对算法的执行过程没有直观的认识,因此我就萌生了做算法演示系统的想法。

这次做的算法演示,是八皇后问题的回溯算法。想当年我也是费了好大劲才掌握回溯算法,因此,很渴望有一个软件能够帮助到大家,不知道我做的这个软件对你们是否有帮助。

首先,让我们看一下这个问题的描述。八皇后问题说的是在8*8国际象棋棋盘上,要求在每一行放置一个皇后,且能做到在竖方向,斜方向都没有冲突。更通用的描述就是有没有可能在一张N*N的棋盘上安全地放N个皇后?

让我们回忆下,八皇后问题的回溯算法,我的博文有c语言描述的算法实现http://blog.csdn.net/ljc_zy/archive/2006/03/17/627157.aspx。具体的算法描述,大家google一下吧:)。

C#版本的回溯算法如下:

class q

{

const int n=8;

int[] x = new int
;

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 < 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://www.iwebtrados.com.cn/post/50.html留下邮箱索取源代码和可执行文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: