Algorithm 在Matlab中有条件地求八个邻域的行数和列数
我有一个6*6矩阵Algorithm 在Matlab中有条件地求八个邻域的行数和列数,algorithm,matlab,graph,matrix,Algorithm,Matlab,Graph,Matrix,我有一个6*6矩阵 A= 3 8 8 8 8 8 4 6 1 0 7 -1 9 7 0 2 6 -1 7 0 0 5 4 4 4 -1 0 2 8 1 1 -1 0 8 3 9 我感兴趣的是从A(4,4)=5开始查找邻居的行数和列数。但是,只
A=
3 8 8 8 8 8
4 6 1 0 7 -1
9 7 0 2 6 -1
7 0 0 5 4 4
4 -1 0 2 8 1
1 -1 0 8 3 9
我感兴趣的是从A(4,4)=5开始查找邻居的行数和列数。但是,只有当(4,4)的元素4在右侧,6在左侧,2在顶部,8在底部,1在左上角对角,3在右上角对角,7在左下角对角,9在右下角对角时,它们才会链接到(4,4)作为邻居。更清楚的是,如果邻居围绕着A(4,4),A(4,4)将有邻居,如下所示:
1 2 3;
6 5 4;
7 8 9;
当找到每个邻居时,这种情况将继续。
也将忽略0和-1。最后,我希望得到这些单元格的行和列编号,如下图所示。有没有什么方法可以让这个网络形象化呢。这只是样品。我真的有一个巨大的矩阵
好的,酷,你已经非常接近了,这是循环的最终解决方案。它的运行时间约为0.002秒,所以我认为速度相当快。输出是
FinalAnswer =
0 0 0 0 0 0
0 1 1 0 0 0
0 1 0 1 0 0
1 0 0 1 1 1
0 0 0 0 1 0
0 0 0 0 0 1
coords =
4 1
2 2
3 2
2 3
3 4
4 4
4 5
5 5
4 6
6 6
您尝试了什么?7s(图中绿色)如何满足您的条件。它们既不在底部,也不在对角线A(4,1)上。你能澄清一下吗?…A(2,3)的对角元素A(3,2)的值为7,所以它是邻居。A(3,2)的对角元素A(4,1)的值为7,所以它也是邻居。这样他们就联系在一起了。谢谢Dan。将给出一个快照,但这不是选择一个(4,6)和一个(2,2),一个(2,3),它会找到所有这些,包括果岭。它肯定会找到A(2,2),A(4,6)和A(2,3)。您确定要循环遍历[x,y]=find(current-pass)中的所有x和y值吗?我现在运行它发现的唯一问题是,在边界附近会有维度问题。解决这个问题的最简单方法是用零填充。我将编辑我的答案。这个解决方案是正确的,在你的例子中,它在4次迭代后找到所有的黄色和绿色元素。但我要强调的是,你必须循环x和y变量。我没有做这个循环,你需要自己做。所以有两个循环,一个while循环检查过去和现在是否不同,然后一个for循环遍历find()返回的所有x,y对!好吧,我没有经历这一切。P=焊盘阵列(A,[1]);电流=零(尺寸(A)+2);过去=零(尺寸(A)+2);但我不是当前(5,5)=1;而(当前过去)=1;[x,y]=查找(当前-过去);过去=现在;对于i=1:尺寸(x);对于j=1:尺寸(y);xcoords=x-1:x+1;ycoords=y-1:y+1;电流(xcoords(i),ycoords(j))=。。。(P(xcoords,ycoords)=testi)|电流(xcoords,ycoords);end FinalAnswer=当前(2:end-1,2:end-1);[R,C]=查找(FinalAnswer);我甚至想不出错误在哪里。我真丢脸:(
FinalAnswer =
0 0 0 0 0 0
0 1 1 0 0 0
0 1 0 1 0 0
1 0 0 1 1 1
0 0 0 0 1 0
0 0 0 0 0 1
coords =
4 1
2 2
3 2
2 3
3 4
4 4
4 5
5 5
4 6
6 6