[算法系列]深度优先遍历算法&生成迷宫

今天理解了如何利用图的深度优先算法生成迷宫。关键在于: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