|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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
运行太慢了。。。所以希望高人指教下
不知道是 我算法的问题 还是说 循环可以再简化。。。
这里先拜谢了。。。 |
|