起因,大脑结构的三维扫描模型,各个部分用不同的颜色标记出来,给定三维坐标和其中某组织一点的颜色值,让分割出包含这一区域的最小三维区域。
思路:首先想到连通问题,三维就是26连通,但这要用到递归,我不愿意用递归,故求助栈结构来模拟递归,问题是栈结构要求动态分配存储,故引入最上层元素标记一值,也就是栈中先有元素个数。
不多说了,有不清楚底下我的代码的,欢迎讨饶:hao.shuji@gmail.com
栈结构有三个文件,分别用来Pop,Push,Empty。如下:
Pop.m:
function [x,y,z]=Pop()
global len;
global a;
x = a(len).x;
y = a(len).y;
z = a(len).z;
len = len -1;
Push.m:
function Push(m,n,t)
global len;
global a;
a(len+1).x = m;
a(len+1).y = n;
a(len+1).z = t;
len = len +1;
function Flag = Empty()
global len;
if len == 0;
Flag =
1;
else
Flag =
0;
end;
测试文件:testStack.m
clc;
global len;
len = 1;
global a;
a(1).x = 3;
a(1).y = 2;
a(1).z = 1;
gsize = 30;
markdata=zeros(30,30,30);
testdata=zeros(30,30,30);
markdata(3,2,1)=1;
for i = 1:5
for j =
1:10
for k = 1:15
testdata(i,j,k)=1;
end
end
end
clear i,j,k;
while(~Empty())
len
[x,y,z]=Pop()
len
if(z-1
> 0)
if x-1 > 0
%z-1,y-1,x-1
if y -1 > 0
if testdata((x-1),y-1,z-1) == 1
if markdata((x-1),y-1,z-1) == 0
markdata((x-1),y-1,z-1) = 1;
Push((x-1),y-1,z-1);
end
end
end
%z-1,y,x-1
if testdata((x-1),y,z-1) == 1
if markdata((x-1),y,z-1) == 0
markdata((x-1),y,z-1) = 1;
Push((x-1),y,z-1);