相邻连通域生成矩阵分析
对于一幅有n个连通域的矩阵 如果连通域a和连通域b相邻 则矩阵A(a,b)=1 A(b,a)=1对于生成的矩阵A
举例:n=10的矩阵A
A =
1 0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 1 0 0 0
0 0 1 0 0 1 0 0 0 1
1 0 0 1 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0
0 0 1 0 0 1 1 0 0 0
0 1 0 0 0 1 1 0 0 1
1 0 0 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 1 0 0 1
然后再对于这个矩阵进行分析
如果连通域1和连通域2 相邻( A(1,2)=1 )连通域2和连通域3 相邻( A(2,3)=1 )则认为连通域1和连通域3 相邻( A(1,3)=1 )然后再把 连通域3相邻连通域 加到连通域1相邻的部分中 直到没有其他连通域 可以加入为止。
所以对于上面的矩阵结果应是:
B =
1 0 0 1 0 0 0 1 0 0
0 1 1 0 0 1 1 0 0 1
0 1 1 0 0 1 1 0 0 1
1 0 0 1 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0
0 1 1 0 0 1 1 0 0 1
0 1 1 0 0 1 1 0 0 1
1 0 0 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 1 1 0 0 1 1 0 0 1
以下是我的代码:
B = A;
for a = 1:n
k = 1;
while k == 1
k = 0;
for b = a:n
for c = a:n
if (B(a,b) == 1) & (B(a,c)~=A(b,c))
B(a,c) = 1;
B(c,a) = 1;
k=1;
end
end
end
end
end
运行太慢了。。。所以希望高人指教下
不知道是 我算法的问题 还是说 循环可以再简化。。。
这里先拜谢了。。。 建议用find语句实现。可以参考版内的帖子。 我看了半天精华贴。。。感觉大部分看不太懂。。。而且没有找到。。。
能否给个连接。。
谢谢 没看懂,建议把算法最重要的部分描述清楚:
如果连通域1和连通域2 相邻( A(1,2)=1 )连通域2和连通域3 相邻( A(2,3)=1 )则认为连通域1和连通域3 相邻( A(1,3)=1 )然后再把 连通域3相邻连通域 加到连通域1相邻的部分中 直到没有其他连通域 可以加入为止。
在你举的例子中,A(1,2)=1 ?
页:
[1]