[算法系列]深度优先遍历算法&生成迷宫
今天理解了如何利用图的深度优先算法生成迷宫。关键在于:DFS算法,选择邻结点时必须随机
void DFS(GRAPH g,int qidian,int mark[]) //从第qidian个点出发深度优先周游图g中能访问的各个顶点 { int v1; mark[qidian]=1; printf("%c ",g.vexs[qidian]); for(v1=0;v1<g.num;v1++)//此处,改造为随机,而不是顺序 { if(g.arcs[qidian][v1]!=0&&mark[v1]==0) DFS(g,v1,mark); } }
上述思想,可以生成例如以下的图
根据这个图,我们将结点之间的隔板,按照路线打通即可。
具体实现,可以使用1个字节(4位)表示一个单元格,4个位表示上下左右存不存在板。例如:1111四个位分别对应表示:上下左右。
例如第一个格子应该是1110,是7. 这样,就可以使用一个2维数组存储上述的迷宫图。
参考:
http://zhidao.baidu.com/question/58652444.html?fr=qrl&cid=866&index=1&fr2=query
http://wenku.baidu.com/view/f22455126edb6f1aff001f13.html
http://hi.baidu.com/%CA%FD%BE%DD%BD%E1%B9%B9%BF%CE%B3%CC/blog/item/e92340cf48d8281c00e92874.html