How to solve the following exercise?

9 ビュー (過去 30 日間)
Ellen De Jonghe
Ellen De Jonghe 2020 年 1 月 14 日
編集済み: Andrei Bobrov 2020 年 1 月 14 日
Hye!
I have to solve the following problem:
Consider a matrix M with only the numbers 1 to 9 as elements.
M =
2 9 3 2 4
8 6 4 8 5
5 7 1 6 4
9 8 9 5 1
Consider one of the elements M(i,j) that's not on the edge of the matrix. Such element always has 8 neighbours. If M(i,j) > 1 and each number from 1 to M(i,j)-1 is one of the 8 neighbours, we say that element is neighboring. If M(i,j) = 1, the element is automatically neighboring.
For example, M(2,2) is neighboring because 1,2,3,4 and 5 are one of the element's neighbours. M(3,4) on the other hand isn't neighboring because 2 and 3 don't occur around the element.
Now, I have to write a function that has 3 inputs: a matrix M and a row- and column index. The function has to control whether de element is neighboring or not and has a logical 0 or 1 as output.
  9 件のコメント
Guillaume
Guillaume 2020 年 1 月 14 日
@Ellen, you've got the correct algorithm. As you suspec and Bob pointed out, the construction of n can be done in just one line with simple indexing.
@Bob, no the code also works for 1. m would be empty, so ismember will return empty. sum(empty) is 0 which is also the length of empty.
For the record, the one-liner I was talking about is
res = all(ismember(1:matrix(row, col)-1, matrix(row-1:row+1, col-1:col+1)))
Ellen De Jonghe
Ellen De Jonghe 2020 年 1 月 14 日
Thanks!
I indeed forgot to check the case where M(i,j) = 1, I will try to figure that out.

サインインしてコメントする。

採用された回答

Andrei Bobrov
Andrei Bobrov 2020 年 1 月 14 日
編集済み: Andrei Bobrov 2020 年 1 月 14 日
function out = find_neighbor(M,i,j)
out = all(ismember(1:M(i,j)-1,M(i-1:i+1,j-1:j+1)));
end
  2 件のコメント
Guillaume
Guillaume 2020 年 1 月 14 日
The if is not needed, out is true anyway, if M(i,j) is 1, since all([]) is true.
Andrei Bobrov
Andrei Bobrov 2020 年 1 月 14 日
Thanks Guillaume! I'm fixed.

サインインしてコメントする。

その他の回答 (1 件)

Ellen De Jonghe
Ellen De Jonghe 2020 年 1 月 14 日
That's a very easy one! Thanks.
I seem to always make my scripts much longer than it has to.

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by