在matlab中生成多个二进制矩阵迷宫

时间:2014-03-10 22:22:14

标签: matlab recursion maze

我正在尝试使用以下属性创建代码生成的矩阵:

每个迷宫都有预定数量的盒子 迷宫的复杂程度由箱数控制[即如果n <= 4 complx = 1,则n <= 12 complx = 2,n <= 28 complx = 3]。请参阅可视化插图的代码。

x1 = [1,1,1,1,1,1,1;1,1,1,3,1,1,1;1,1,2,2,2,1,1;1,3,2,2,2,3,1;1,1,2,2,2,1,1;1,1,1,3,1,1,1;1,1,1,1,1,1,1];
x2 = [1,1,1,1,1,1,1,1,1,1,1;1,1,1,1,1,3,1,1,1,1,1;1,1,1,1,3,2,3,1,1,1,1;1,1,1,1,1,2,1,1,1,1,1;1,1,3,1,2,2,2,1,3,1,1;1,3,2,2,2,2,2,2,2,3,1;1,1,3,1,2,2,2,1,3,1,1;1,1,1,1,1,2,1,1,1,1,1;1,1,1,1,3,2,3,1,1,1,1;1,1,1,1,1,3,1,1,1,1,1;1,1,1,1,1,1,1,1,1,1,1];
x3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;1,1,1,1,1,3,1,1,1,3,1,1,1,1,1;1,1,1,1,3,2,3,1,3,2,3,1,1,1,1;1,1,1,1,1,2,1,3,1,2,1,1,1,1,1;1,1,3,1,1,2,2,2,2,2,1,1,3,1,1;1,3,2,2,2,1,1,2,1,1,2,2,2,3,1;1,1,3,1,2,1,2,2,2,1,2,1,3,1,1;1,1,1,3,2,2,2,2,2,2,2,3,1,1,1;1,1,3,1,2,1,2,2,2,1,2,1,3,1,1;1,3,2,2,2,1,1,2,1,1,2,2,2,3,1;1,1,3,1,1,2,2,2,2,2,1,1,3,1,1;1,1,1,1,1,2,1,3,1,2,1,1,1,1,1;1,1,1,1,3,2,3,1,3,2,3,1,1,1,1;1,1,1,1,1,3,1,1,1,3,1,1,1,1,1;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
example = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1,3,1,1,1,1,1;1,1,1,1,1,1,1,1,3,2,3,1,1,1,1;1,1,1,1,1,1,1,3,1,2,1,1,1,1,1;1,1,3,1,1,1,3,2,2,2,1,1,3,1,1;1,1,2,2,2,1,1,2,1,1,2,2,2,3,1;1,1,3,1,2,1,2,2,2,1,2,1,3,1,1;1,1,1,3,2,2,2,2,2,2,2,3,1,1,1;1,1,3,1,2,1,2,2,2,1,2,1,3,1,1;1,3,2,2,2,1,1,2,1,1,2,2,2,3,1;1,1,3,1,1,1,3,2,2,2,1,1,3,1,1;1,1,1,1,1,1,1,3,1,2,1,1,1,1,1;1,1,1,1,1,1,1,1,3,2,3,1,1,1,1;1,1,1,1,1,1,1,1,1,3,1,1,1,1,1;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
figure('units', 'pixels', 'position', [100 100 1200 300], 'resize', 'off'); 
subplot(1,4,1); imagesc(x1);title('complexity 1 full maze');
subplot(1,4,2); imagesc(x2);title('complexity 2 full maze');
subplot(1,4,3); imagesc(x3);title('complexity 3 full maze');
subplot(1,4,4); imagesc(example);title('complexity 3 random partial maze');

对于n = 4,n = 12,n = 28,矩阵完全如下图所示,带有x,y坐标的附加矩阵
但对于n

是否可以轻松生成这些迷宫的随机变量?

任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:0)

我认为我解决了它。

不是最有效的方式,所以如果有人有改进,他们非常欢迎

function [maze, nodes] = genMaze(tmp_maze, numOfnodes)
[x,y] = find(tmp_maze==3);
[n,dims] = size(tmp_maze);
origin = ceil(dims/2);
N = randperm(size(x,1));
D1 = bwdistgeodesic(tmp_maze>1, origin, origin,'cityblock');
maze = zeros(n,dims);
for i=1:numOfnodes
    tmpD = bwdistgeodesic(tmp_maze>1, x(N(i)), y(N(i)),'cityblock');
    D = D1 + tmpD;
    D(isnan(D)) = inf;
    path = imregionalmin(D);
    maze = maze+path;
end
subplot(1,2,1); imagesc(tmp_maze);subplot(1,2,2); imagesc(maze);
nodes = [x(N(1:numOfnodes));y(N(1:numOfnodes))];
end