matlab的栈,matlab 实现栈结构 用于实现递归,分割三维物体

起因,大脑结构的三维扫描模型,各个部分用不同的颜色标记出来,给定三维坐标和其中某组织一点的颜色值,让分割出包含这一区域的最小三维区域。

思路:首先想到连通问题,三维就是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);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值