How to solve the following exercise?
古いコメントを表示
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 件のコメント
darova
2020 年 1 月 14 日
Please show your attempts
Ellen De Jonghe
2020 年 1 月 14 日
darova
2020 年 1 月 14 日
I don't want to do all your work for you. No one is gonna pay me for this
Bob Thompson
2020 年 1 月 14 日
What are the steps that you think you need to accomplish conceptually?
How familiar are you with MATLAB?
Guillaume
2020 年 1 月 14 日
That's the problem, I ain't got one. I just don't see it :).
First step: write down the algorithm?
- How would you list the 8 neighbours
- Once you've listed the neighbours, how would you check that they make up the set from 1 to M(i, j)?
Depending on which functions you're allowed to use, the whole thing can be done in just one line, so it's not a very hard problem.
Ellen De Jonghe
2020 年 1 月 14 日
Bob Thompson
2020 年 1 月 14 日
That's definitely a really good start. I have a couple of thoughts to add.
1) How does your code respond to the selected element being 1? I think you may have a problem there.
2) You can always just take the entire 3x3 around the selected element. Even if it contains the element that shouldn't be a problem with your logic check.
n = matrix(row-1:row+1,column-1:column+1);
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
2020 年 1 月 14 日
採用された回答
その他の回答 (1 件)
カテゴリ
ヘルプ センター および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!