MATLAB演示深度优先搜索算法迷宫问题

MATLAB演示深度优先搜索算法迷宫问题

DFS,即深度优先搜索,是一种每次搜索都向尽可能深的地方去搜索,到达尽头时再回溯进行其他结点去搜索的搜索策略。形象的说,这是一种“不撞南墙不回头”的策略。

其实也就是遍历,只不过不像一个线性数组的遍历那么直观罢了。这里采用递归形式的写法。

maze_dfs

完整代码

% 深度优先搜索迷宫问题
%% main.m
global flag h
flag = false;
maze = [0 1 0 0 0 1 1 0 1 1
    0 0 0 0 1 1 0 0 0 0
    0 0 0 0 1 1 0 1 1 1
    0 1 0 0 1 0 0 1 0 0
    0 1 0 0 0 0 0 0 0 1
    0 1 1 0 1 0 1 1 0 1
    0 0 1 1 1 0 1 0 0 1
    1 0 1 0 0 0 1 0 1 1
    1 0 1 0 1 1 1 0 0 1
    1 0 0 0 0 0 1 0 0 0];
h = figure;
axis([0 10 0 10])
axis square off
hold on
p = [1 1];
v = zeros(10);
%% draw_pos.m
function draw_pos(p)
t = 0:.1:2*pi;
x = p(1)-0.5+0.45*cos(t);
y = p(2)-0.5+0.45*sin(t);
plot(x,y,'b','MarkerFaceColor','b');
fill(x,y,'b')
end
%% draw_all.m
function draw_all(p,maze,n)
global h
for i = 1:10
    for j = 1:10
        if maze(i,j) == 0
            rectangle('Position',[i-1 j-1 1 1],'FaceColor',[.9 .9 .9])
        else
            rectangle('Position',[i-1 j-1 1 1],'FaceColor','r')
        end
    end
end
draw_pos(p)
frame = getframe(h); 
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if n == 1
  imwrite(imind,cm,'maze_dfs.gif','gif','Loopcount',inf); 
else 
  imwrite(imind,cm,'maze_dfs.gif','gif','WriteMode','append'); 
end 
pause(.3)
end
%% dfs.m
function dfs(p,d,v,maze,n)
global flag
v(p(1),p(2)) = 1;
if flag
    return
end
draw_all(p,maze,n);
n = n+1;
if (p(1) == 10 && p(2) == 10)
    flag = true;
    return 
end
for i = 1:4
    [x,y] = deal(p(1)+d(i,1),p(2)+d(i,2));
    if x > 0 && x <= 10 && y > 0 && y <= 10 && maze(x,y) == 0 && v(x,y) == 0
        dfs([x,y],d,v,maze,n);
    end
end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值