声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1748|回复: 3

[编程技巧] 相邻连通域生成矩阵分析

[复制链接]
发表于 2007-6-2 12:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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

使用道具 举报

发表于 2007-6-2 13:02 | 显示全部楼层
建议用find语句实现。  可以参考版内的帖子。
 楼主| 发表于 2007-6-2 18:47 | 显示全部楼层
我看了半天精华贴。。。感觉大部分看不太懂。。。而且没有找到。。。
能否给个连接。。
谢谢
发表于 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 ?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 05:08 , Processed in 0.063470 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表