主权项 |
一种基于2D Growing Tree迷宫的数字置乱方法,其特征在于包括以下步骤:第1步:设定迷宫初始范围S<sub>init</sub>=()<sub>m×n</sub>和迷宫有效区域S<sub>maze</sub>=(s<sub>i,j</sub>)<sub>m×n</sub>,对于<img file="FDA0000627828900000011.GIF" wi="131" he="79" />i=0,…,m‑1,j=0,…,n‑1,若<img file="FDA0000627828900000014.GIF" wi="251" he="83" />则标记s<sub>i,j</sub>=‑1,反之则标记s<sub>i,j</sub>=0表示该节点未访问,若s<sub>i,j</sub>>0表示该节点已访问;第2步:对于<img file="FDA0000627828900000012.GIF" wi="279" he="84" />i=0,…,m‑1,j=0,…,n‑1,记s<sub>i,j</sub>.d,d=0,1,2,3依次为节点s<sub>i,j</sub>的下方、右方、上方和左方墙,初始化s<sub>i,j</sub>.d=‑1,d=0,1,2,3,即将S<sub>maze</sub>范围内的所有节点以墙进行分隔,s<sub>i,j</sub>.d=‑1表示有墙,s<sub>i,j</sub>.d=0表示无墙;第3步:选择随机数发生器y=RG(x),设定初始值RG.init=seed,初始化迷宫节点列表A<sub>maze</sub>=Φ,节点更新序列A<sub>update</sub>=Φ,由随机数发生器产生2个概率P<sub>recent</sub>,P<sub>oldest</sub>∈[0,1);第4步:选取<img file="FDA0000627828900000013.GIF" wi="590" he="77" />将s<sub>x,y</sub>分别加到A<sub>maze</sub>和A<sub>update</sub>,即A<sub>maze</sub>=A<sub>maze</sub>.add(s<sub>x,y</sub>)A<sub>update</sub>=A<sub>update</sub>.add(s<sub>x,y</sub>);第5步:若A<sub>maze</sub>≠Φ,则循环执行第6步~第8步;第6步:产生1个随机数P∈[0,1),若P∈[0,P<sub>recent</sub>],则取A<sub>maze</sub>尾部元素作为当前节点s<sub>x,y</sub>;反之若P∈[P<sub>recent</sub>,P<sub>recent</sub>+P<sub>oldest</sub>],则取A<sub>maze</sub>头部元素作为当前节点s<sub>x,y</sub>,反之则从A<sub>maze</sub>中随机取一个元素作为当前节点s<sub>x,y</sub>,s<sub>x,y</sub>=A<sub>maze</sub>(index),index=random(A<sub>maze</sub>.length);第7步:若s<sub>x,y</sub>周围的邻近节点中s<sub>x+1,y</sub>,s<sub>x,y+1</sub>,s<sub>x‑1,y</sub>,s<sub>x,y‑1</sub>存在未访问的有效节点s<sub>x′,y′</sub>∈S<sub>maze</sub>,则将s<sub>x′,y′</sub>加入到A<sub>maze</sub>,即A<sub>maze</sub>=A<sub>maze</sub>.add(s<sub>x′,y′</sub>),A<sub>update</sub>=A<sub>update</sub>.add(s<sub>x′,y′</sub>);第8步:若s<sub>x,y</sub>周围的邻近节点中s<sub>x+1,y</sub>,s<sub>x,y+1</sub>,s<sub>x‑1,y</sub>,s<sub>x,y‑1</sub>不存在未访问的有效节点s<sub>x′,y′</sub>∈S<sub>maze</sub>,则删除A<sub>maze</sub>索引位置为Index位置的元素,即A<sub>maze</sub>.delete(index);第9步:利用A<sub>update</sub>构造S<sub>maze</sub>=(s<sub>i,j</sub>)<sub>m×n</sub>范围内所有节点间的映射关系,从而将S<sub>maze</sub>=(s<sub>i,j</sub>)<sub>m×n</sub>范围内的所有节点置乱。 |