for loops question, cell array, cardinal direction

조회 수: 1 (최근 30일)
Meowooo
Meowooo 2017년 10월 13일
답변: Walter Roberson 2017년 10월 14일
Question:
Finding the shortest distance between two “points” is a class of algorithm called pathfinding. The distancemay be a physical distance between two locations (e.g. driving directions), or something more abstractlike the fastest sequence from start to finish of a construction project. Here you will consider a simplified pathfinding problem where the distance is indices in a matrix. Starting with a matrix of -1s, 0s and 1s, find the distance of every 0-valued entry to the nearest 1-valuedentry, without passing through -1s. For simplicity, being directly next to a 1 is considered a distance of 2. Create a function with the following header:
function [ filled ] = travelDistance( blank )
where: blank is a two-dimensional array comprised of -1s, 0s and 1s, and filled is blank modified to the specifications below. To create filled, replace every 0 in blank with its distance to the nearest 1 (staring at 2), traveling along cardinal directions (up, down, left and right) without passing through a -1 value. That is, all 0s that ared irectly next to a 1 should be changed to a 2 and all 0s next to any new 2s should be changed to 3s, and soon. Spaces with -1 values should be treated as “walls” and should stay -1. If there is no route from a 0 to a 1 without passing through a -1, it should remain a 0. The ultimate result should be that every 0 that is connected to a 1 is replaced with its distance to the nearest 1. For simplicity you may assume that the edges of blank always contain a -1. Your function should be able to reproduce the following test case:
>> m_smallm_small =-1 -1 -1 -1 -1 -1 -1-1 0 0 -1 0 0 -1-1 0 1 -1 0 -1 -1-1 0 -1 -1 -1 -1 -1-1 0 -1 0 1 0 -1-1 -1 -1 -1 -1 -1 -1
>> travelDistance(m_small)
ans =-1 -1 -1 -1 -1 -1 -1-1 3 2 -1 0 0 -1-1 2 1 -1 0 -1 -1-1 3 -1 -1 -1 -1 -1-1 4 -1 2 1 2 -1-1 -1 -1 -1 -1 -1 -1
My answer:
function [filled] = travelDistance( blank )
% blank is a two-dimensional array comprised of -1s, 0s and 1s,
% and filled is blank modified to the specifications below.
% replace every 0 in blank with its distance to the nearest 1(starting at 2),
% all 0s that are directly next to a 1 should be changed to a 2
% all 0s next to any new 2s should be changed to 3s.
% -1 stay -1
filled = blank;
[a,b] = size(blank);
for i=1:1000
for X = 1:a
for Y = 1:b
for filled(X,Y)==0;
for filled(X+1,Y)==i||filled(X-1,Y)==i||filled(X,Y+1)==i||filled(X,Y-1)==i
filled(X,Y)=i+1;
end
else
filled = blank;
end
end
end
just wondering which step that I missed

답변 (1개)

Walter Roberson
Walter Roberson 2017년 10월 14일
"for" must be followed by a (unindexed and unqualified) variable name and then a "=" and then an expression .
for filled(X,Y)==0
is not valid syntax. Perhaps you wanted "if" instead of "for"
if filled(X,Y)==0

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by