Recursive pathfinding Index exceeds matrix dimensions

7 vues (au cours des 30 derniers jours)
Peter Jensen
Peter Jensen le 20 Avr 2016
Modifié(e) : Peter Jensen le 20 Avr 2016
The function is supposed to return a path for a mouse to go, which is one of the four corners of the maze. I am trying with recursive. B is a 2 dimensonal metrix, probe is [x y] vector and prevProbe start out as [0 0] This is an error messege I recive on both err1, err2, err3 and err4. identifier: 'MATLAB:badsubscript' message: 'Index exceeds matrix dimensions.' cause: {} stack: [724x1 struct]
function [ route done ] = PathFinder( B, probe, prevProbe )
%PATHFINDER Summary of this function goes here
% Detailed explanation goes here
done = false;
route = [];
e1 = [1 1];
e2 = [size(B,1) 1];
e3 = [1 size(B,2)];
e4 = [size(B,1) size(B,2)];
% = 1 (right), 2 (left), 3 (up), 4 (down)
if isequal(probe, e1) | isequal(probe, e2) | isequal(probe, e3) | isequal(probe, e4)
done = true
return;
route
end
try
if B(probe(1),probe(2)+1) == 0
[route, done] = PathFinder(B, [probe(1) probe(2)+1], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
try
if B(probe(1)+1,probe(2)) == 0
[route, done] = PathFinder(B, [probe(1)+1 probe(2)], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
try
if B(probe(1),probe(2)-1) == 0
[route, done]= PathFinder(B, [probe(1) probe(2)-1], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
try
if B(probe(1)-1,probe(2)) == 0
[route, done] = PathFinder(B, [probe(1)-1 probe(2)], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
end
% = 1 (right), 2 (left), 3 (up), 4 (down)
function [dir] = getDir(probe, prevProbe)
temp = probe - prevProbe;
if isequal(temp,[1 0]);
dir = 1;
return;
elseif isequal(temp,[0 1]);
dir = 3;
return;
elseif isequal(temp,[-1 0]);
dir = 2;
return;
elseif isequal(temp,[0 -1]);
dir = 4;
return;
end
end

Réponses (0)

Catégories

En savoir plus sur Data Types dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by