主权项 |
一种基于3D Wilson迷宫的数字置乱方法,其特征在于包括以下步骤:第1步:设定迷宫初始范围为S<sub>init</sub>=()<sub>m×n×l</sub>和迷宫有效区域S<sub>maze</sub>=(s<sub>i,j,k</sub>)<sub>m×n×l</sub>,对于<img file="FDA0000627842630000011.GIF" wi="144" he="84" />i=0,…,m‑1,j=0,…,n‑1,k=0,…,l‑1,若<img file="FDA0000627842630000014.GIF" wi="279" he="83" />则标记s<sub>i,j,k</sub>=‑1,反之则标记s<sub>i,j,k</sub>=0表示该节点未访问,若s<sub>i,j,k</sub>>0表示该节点已访问,统计S<sub>maze</sub>范围内的节点数量Num<sub>maze</sub>=count(S<sub>maze</sub>);第2步:对于<img file="FDA0000627842630000012.GIF" wi="302" he="84" />i=0,…,m‑1,j=0,…,n‑1,k=0,…,l‑1,记s<sub>i,j,k</sub>.d,d=0,1,2,3,4,5依次为节点s<sub>i,j,k</sub>的下方、右方、上方、左方、底部和顶部墙,初始化s<sub>i,j,k</sub>.d=‑1,d=0,1,2,3,4,5,‑1表示为有墙,0表示无墙;第3步:选择随机数发生器y=RG(x),设定随机数发生器初始值RG.init=seed,记已访问的节点数量Num<sub>visited</sub>,初始Num<sub>visited</sub>=0,初始化已访问迷宫节点列表A<sub>update</sub>=Φ;第4步:随机选取<img file="FDA0000627842630000013.GIF" wi="325" he="78" />x=x<sub>0</sub>,y=y<sub>0</sub>,z=z<sub>0</sub>,标记s<sub>x,y,z</sub>=1,将A<sub>update</sub>=A<sub>update</sub>.add(s<sub>x,y,z</sub>),Num<sub>visited</sub>=Num<sub>visited</sub>+1;第5步:若Num<sub>visited</sub><Num<sub>maze</sub>,则循环执行第6步~第10步;第6步:初始化Wilson随机游走路线列表A<sub>Wilson</sub>=Φ,初始化全0元素Wilson矩阵M<sub>Wilson</sub>=(mw<sub>i,j,k</sub>)<sub>m×n×l</sub>,其中mw<sub>i,j,k</sub>=0表示s<sub>i,j,k</sub>不在Wilson随机游走路线上,mw<sub>i,j,k</sub>=‑1表示s<sub>i,j,k</sub>在Wilson随机游走路线上;第7步:从s<sub>x,y,z</sub>周围S<sub>maze</sub>范围内有效节点s<sub>x+1,y,z</sub>,s<sub>x,y+1,z</sub>,s<sub>x‑1,y,z</sub>,s<sub>x,y‑1,z</sub>,s<sub>x,y,z‑1</sub>,s<sub>x,y,z+1</sub>中随机选择1个节点s<sub>x′,y′,z′</sub>作为当前节点,若s<sub>x′,y′,z′</sub>=0且mw<sub>x′,y′,z′</sub>=‑1,则在Wilson随机游走路线列表A<sub>Wilson</sub>=Φ中移除s<sub>x′,y′,z′</sub>第1次位置出现之后的所有节点并将对应的节点重新在M<sub>Wilson</sub>=(mw<sub>i,j,k</sub>)<sub>m×n×l</sub>矩阵上标记为0;第8步:若s<sub>x′,y′,z′</sub>=0且mw<sub>x′,y′,z′</sub>=0,则标记mw<sub>x′,y′,z′</sub>=‑1,则将s<sub>x′,y′,z′</sub>加入A<sub>Wilson</sub>,即A<sub>Wilson</sub>=A<sub>Wilson</sub>.add(s<sub>x′,y′,z′</sub>);第9步:若s<sub>x′,y′,z′</sub>=1,则将A<sub>Wilson</sub>中的所有节点标记为已访问,将其加入到A<sub>update</sub>,Num<sub>visited</sub>=Num<sub>visited</sub>+A<sub>Wilson</sub>.length;第10步,若从s<sub>x,y,z</sub>周围不存在可以访问的S<sub>maze</sub>范围内有效节点,则从A<sub>update</sub>随机选择1个节点作为当前节点s<sub>x,y,z</sub>;第11步:利用A<sub>update</sub>构造S<sub>maze</sub>=(s<sub>i,j,k</sub>)<sub>m×n×l</sub>范围内所有节点间的映射关系,从而将S<sub>maze</sub>=(s<sub>i,j,k</sub>)<sub>m×n×l</sub>范围内所有节点置乱。 |