3D屏保:N皇后
前几天园子里有人发表关于8皇后的算法.只有代码,没有能运行的DEMO多枯燥.于是我这两天抽时间写了个N皇后的屏保程序.程序启动后会从4皇后到14皇后显示其所有排列,每隔0.5秒自动切换一次.按下空格键会停止自动切换,按-=键可以手动切换排列.算法是对网上找的程序做了点修改,先申请一块8M的内存区域,将N皇后中所有合适的位置保存到该内存中,代码如下:
static Ybyte g_listQueen[YD_MAX_STACKS_NUM] = {};
bool check_pos_valid(Ybyte loop, Ybyte value)
{
Ybyte index;
Ybyte data;
for(index = ; index < loop; index ++)
{
data = g_listQueen[index];
if(value == data)
return false;
if((index + data) == (loop + value))
return false;
if((index - data) == (loop - value))
return false;
}
return true;
}
void CNQueenEntitySP::CalculateQueen(Yuint index)
{
Ybyte loop;
for(loop = ; loop < m_stacks; loop++)
{
if(check_pos_valid(index, loop))
{
g_listQueen[index] = loop;
if(m_stacks - == index)
{
//assert((m_resultsCount + 1)*m_stacks < YD_BUFFER_SIZE);
memcpy(m_resultBuffer + m_resultsCount*m_stacks, g_listQueen, m_stacks);
m_resultsCount++;
g_listQueen[index] = ;
return;
}
CalculateQueen(index + );
g_listQueen[index] = ;
}
}
}
算法使用的是递归,让人感觉有些费解,我也是看好好久才搞明白.其实N皇后问题可以写成一个N重循环,而为了解决N的不确定性,所以采用了递归算法.因此使用递归和使用N重循环其算法的复杂度是一样的.其算法运算量随着N数目的增加会爆增.生成14皇后的数据非常耗时,请耐心等待.再说递归,这样的代码多少都让人头疼,而实际应用中,我很少使用递归.印象中只有遍历文件夹时才用过,很早之前还写过一个无限递归的BUG导致堆栈爆掉,忘了是做什么应用了.再有就是上学时学算法,老师教的是所有的递归算法都可以改成循环,而考试的一个题目就是将某个递归算法改循环.其实反过来说,所有的循环也可以改成递归,我学过一个神一样的语言prolog,它里面貌似没有循环,所有的循环逻辑都是用递归实现的.写它的代码有种要疯的感觉.
对于8皇后算法,最早接触是上大学时开过一门课叫面向对象的程序设计,教材中有个DEMO是8皇后.后来这课的课程设计,大部分同学交的就是这个8皇后算法.我的也是,而且还是拷贝别人的.对这门课我目前也只有这点印象,因为当时我这课基本没怎么上,也根本不懂什么是面向对象.谁让这课的学分不高,考研不考呢.毕业后这本书也不见了,我现在很疑惑的是:8皇后问题和面向对象有什么关系呢?希望哪天能找到这书教材,看看这书写过什么.
"NQueenSP.scr"全屏可执行程序
"NQueen.exe"窗口可执行程序
鼠标左键右键拖动,调节视角.
鼠标滚轮,调节摄像机的远近.
X,恢复为默认视角并停止视角旋转.
空格,P,暂停与恢复.
ESC,退出.
R N皇后重新开始.
[ 减少皇后数.最小为4
] 增加皇后数.最多为14
- 上一个排列
= 下一个排列
下载地址:
http://files.cnblogs.com/WhyEngine/NQueenSP.zip
屏保设置方式
XP:
将目录下的所有文件拷贝到WINDOWS系统目录下如"C:\WINDOWS\system32"
WIN7,WIN8:
将目录下的所有文件拷贝到"C:\WINDOWS\SysWOW64"或"C:\WINDOWS\SysWOW32"目录下
在设置屏保的对话框中,选择"NQueenSP"
3D屏保:N皇后的更多相关文章
- 3D屏保: 线圈
LineFlower3DSP 一个3D屏保程序,算法的原理类似于圆内轮旋线的生成. 下载地址: http://files.cnblogs.com/WhyEngine/LineFlower3D_sp.z ...
- 3D屏保:排色榜
3D屏保:排色榜 排色榜,是一个针对图形学中的色彩进行排序的DEMO,这里的色是色彩的意思,看成别的点进来的同学请自觉面壁.该DEMO可以按RGB,GBR,BRG,灰度值四种方式进行排序.排序算法为冒 ...
- 3D屏保: 彩色盘子
一个彩色盘子的屏保 记得小时候在电视上看过一个科普节目,由多个颜色组成的盘子,如果快速旋转起来,会看上去是白色的.于是我就写了这个屏保程序,但发现在计算机上模拟并不是这样的. "RollPl ...
- 3D屏保:魔方2.0版本
一个三维魔方的屏保软件,可支持2级到72级的魔方.启动后魔方会自动旋转,并最终回到初始状态.有很多人问我这是怎么做到的,用的什么解魔方的算法,其实我自己根本就不会玩魔方,别人用技巧解魔方,我这程序中用 ...
- 3D屏保程序:汉诺塔
学过程序的人一定记得汉诺塔.我们学的第一个程序是HelloWorld,而碰到的第一个坑就是汉诺塔,短短十几行代码,不知花费了多少时间精力去理解.我记得当年的开发环境还是蓝屏的,汉诺塔程序的输出还是一行 ...
- html5 canvas 3d屏保 源码
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...
- C#制作简易屏保
前言:前段时间,有个网友问我C#制作屏保的问题,我瞬间懵逼了(C#还可以制作屏保!).于是我去查阅相关资料,下面把C#如何制作屏保的过程及我学习过程的心得也记录下来,希望对需要的人能有帮助. 基本思路 ...
- 一个仿windows泡泡屏保的实现
一个仿windows泡泡屏保的实现 有天看到有人在百度知道上问windows 泡泡屏保该怎么用C#做,一时有趣,就做了一个出来,对于其中几个要点总结如下: 一,屏保程序的制作要求 屏保程序的扩展名是. ...
- 仿W8屏保
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- poj3624 Charm Bracelet(DP,01背包)
题目链接 http://poj.org/problem?id=3624 题意 有n个手镯,每个手镯有两个属性:重量W,需求因子D.还有一个背包,它能装下总重量不超过M的手镯.现在将一些镯子装入背包,求 ...
- memory_get_usage()查看PHP脚本使用内存
memory_get_usage()可以查看当前php使用的内存大小.对于优化算法提高内存使用效率还是很实用的,尤其是对当下的移动端程序. <?php echo memory_get_usage ...
- Python网络编程之socket应用
1 引言 本篇主要对Python下网络编程中用到的socket模块进行初步总结.首先从网络基础理论出发,介绍了TCP协议和UDP协议:然后总结了socket中的常用函数:最后通过实际代码展示基本函数的 ...
- [BZOJ4881][Lydsy1705月赛]线段游戏
首先冷静一下看清问题的本质,是将整个数列分成两个递增子序列. 那么由Dilworth定理得,无解当且仅当数列的最长下降子序列的长度>2,先特判掉. 然后就有一些比较厉害的做法:http://ww ...
- [CC-CHEFINV]Chef and Swaps
[CC-CHEFINV]Chef and Swaps 题目大意: 长度为\(n(n\le2\times10^5)\)的数列,\(q(q\le2\times10^5)\)次询问,每次问交换\(A_x\) ...
- [BZOJ4832]抵制克苏恩
[BZOJ4832]抵制克苏恩 思路: \(f[i][j][k][l]\)表示打了\(i\)次,血量为\(1\sim 3\)的随从有\(j,k,l\)个的期望.转移时注意避免重复. 源代码: #inc ...
- hdu 4025 Equation of XOR 状态压缩
思路: 设: 方程为 1*x1 ^ 1*x2 ^ 0*x3 = 0; 0*x1 ^ 1*x2 ^ 1*x3 = 0; 1*x1 ^ 0*x2 ^ 0*x3 = 0 把每一列压缩成一个64位整数,因为x ...
- 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】
一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...
- Python168的学习笔记7
关于多线程操作. 对于IO操作,如访问网站,写入磁盘这种需要时间等待响应的操作,多个cpu也几乎不能提高效率. 对于CPU密集型操作,如这个格式转换,可以通过多个cpu同时去进行. 但是对于pytho ...
- 三个实例演示 Java Thread Dump 日志分析(转)
原文链接:http://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html 转来当笔记^_^ jstack Dump ...