随机生成一个迷宫
1 | #!/usr/bin/env python |
2013年8月17日更新
现在知道这个算法的名称了:recursive backtracking,可以参见拙作完美迷宫生成算法
随机生成一个迷宫
1 | #!/usr/bin/env python |
现在知道这个算法的名称了:recursive backtracking,可以参见拙作完美迷宫生成算法
设盘子编号为
输出初始局面(所有盘子都在1号柱子)到终止局面(所有盘子都在3号柱子)的最优方案。
时间复杂度:
输出最优方案中某一局面之前经过的步骤数。 时间复杂度:
1 |
|
输出当前局面(不一定是最优解的中间步骤)到终止局面的最优方案。
时间复杂度:
1 |
|
输出当前局面下,把所有盘子移动到任一根柱子的最优方案。 时间复杂度:Ο(2^N)
1 |
|
输出当前局面下,把所有盘子移动到任一根柱子的最优方案所需步数。
时间复杂度:
易知,必定把
注意到如果
之所以要移动
1 | #include <stdio.h> |
总结一下,对于求方案的问题,因为最坏情况下步骤数可以达到
对于求步骤数(无须输出方案),以上源码时间复杂度都是
language: C99 + GTK+ algorithm:对棋盘各个格子设置权值,计算总值 icon:程序截图 license: GNU General Public License v3 revision control: Mercurial bead-black.png bead-white.png texture1.png texture2.png: 8pm(http://hi.baidu.com/eightpm) 提供
gdk透明贴图好像有点麻烦(以前 Win32 API 用得是 TransparentBlt)
菜单采用GtkUIManager,可以看demo:/usr/share/gtk-2.0/demo/ui_manager.c
的透明贴图:
1 | void pixbuf_transparent(GdkPixbuf *dst, const GdkPixbuf *src, gint dstx, gint dsty, guint transcolor) |
语言:C99 图标是随手涂鸦的 界面部分抄袭 http://sourceforge.net/projects/tictactoegtk/(作者:Obada Denis(obadadenis@gmail.com),javajox(javajox@users.sourceforge.net)) 算法是 min-max search 版本控制系统采用 8pm 推荐的 Mercurial 项目首页:http://code.google.com/p/rayup/ #里面还有些其他乱七八糟的东西 Download:hg clone https://rayup.googlecode.com/hg/ rayup 没有安装 Mercurial 的话,可以访问 http://code.google.com/p/rayup/source/browse/,手动下载一个个文件……
似乎是某个TopCoder SRM的题目。
N 个球,有一个是坏的,坏球重量与好球不同(略轻/重于好球)。有一个天平,可以告知左右两边孰重孰轻,最小化最坏情况下称量次数,给出称量方案。下面讨论该问题的一个扩展——如何通过已知信息(即之前称量结果,之前的称量结果可能不是最优的)选择下一步称量方案,最小化最坏情况下的称量次数。
根据已有信息把所有球分为4类: - 肯定是好球 - 不可能比好球轻(不能确定是否为坏球) - 不可能比好球重(不能确定是否为坏球) - 不知道任何信息
每个球必定属于以上四类中的某一类。我们只需知道每一类的数目即可,具体编号无关紧要。令\(s[nh][nl][nu]\)表示有\(nh\)个1类球,nl 个2类球,nu 个3类球,最坏情况下需要称量的次数。枚举一边放置的各类型球数 lh(1类),ll(2类),lu(3类),枚举另一边放置的各类型球数 rh(1类),rl(2类),ru(3类),re(0类)。如果两边都有0类球,那么我们可以在两边各移去一个。我们可以保证0类球只出现在一边,不妨设为 rh(1类),rl(2类),ru(3类) 一边。
下面程序可计算如下形式的式子:
1 | one |
方法是枚举进位+解方程,涉及的字母以及各个位上的进位作为变量,然后解方程。这样可以用 各个位上的进位 和 字母变量中的自由变量 表示 其他字母变量。枚举 各个位上的进位 和 字母变量中的自由变量 以求出 其他字母变量,以此得到各组解。使用方法:根据要求解的式子设置各个变量,N、M设置得大点没关系,L要正好等于式子的行数,然后输入L行字符串
1 |
|
NOIP 2009考了靶形数独,可能前一天我还敲了一遍这段代码……
.emacs 很多 elisp 文件是通过 gentoo portage 安装的,部分不在 portage 里的放在了 ~/.emacs.d 下面
1 | (progn (cd "~/.emacs.d") (normal-top-level-add-subdirs-to-load-path)) |
记得这是NOIP 2009前的停课时期,我做题无聊了就折腾Linux下的各种工具,此兴悠哉!来机房也不都是来做题的,来“操机”的不少,我觉得隐隐有危机,果不其然后来机房就只在一周的少数几天开放了。