Feather013 发表于 2007-6-2 12:29

相邻连通域生成矩阵分析

对于一幅有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

运行太慢了。。。所以希望高人指教下
不知道是 我算法的问题 还是说 循环可以再简化。。。
这里先拜谢了。。。

pengweicai 发表于 2007-6-2 13:02

建议用find语句实现。可以参考版内的帖子。

Feather013 发表于 2007-6-2 18:47

我看了半天精华贴。。。感觉大部分看不太懂。。。而且没有找到。。。
能否给个连接。。
谢谢

eight 发表于 2007-6-3 23:29

没看懂,建议把算法最重要的部分描述清楚:
如果连通域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]
查看完整版本: 相邻连通域生成矩阵分析