通过,几天的学习研究,对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[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 < 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留下邮箱索取源代码和可执行文件。