【发布时间】:2011-03-17 16:37:47
【问题描述】:
考虑排列在大小为 N×M 的网格上的一组点。 我正在尝试构建邻接矩阵,使得 相邻点相连。
例如,在带有图表的 3x3 网格中:
1-2-3
| | |
4-5-6
| | |
7-8-9
我们应该有对应的邻接矩阵:
+---+------------------------------------------------------+
| | 1 2 3 4 5 6 7 8 9 |
+---+------------------------------------------------------+
| 1 | 0 1 0 1 0 0 0 0 0 |
| 2 | 1 0 1 0 1 0 0 0 0 |
| 3 | 0 1 0 0 0 1 0 0 0 |
| 4 | 1 0 0 0 1 0 1 0 0 |
| 5 | 0 1 0 1 0 1 0 1 0 |
| 6 | 0 0 1 0 1 0 0 0 1 |
| 7 | 0 0 0 1 0 0 0 1 0 |
| 8 | 0 0 0 0 1 0 1 0 1 |
| 9 | 0 0 0 0 0 1 0 1 0 |
+---+------------------------------------------------------+
作为奖励,该解决方案应该适用于 4 和 8 连接的相邻点,即:
o o o o
o X o vs. o X o
o o o o
这是我到目前为止的代码:
N = 3; M = 3;
adj = zeros(N*M);
for i=1:N
for j=1:M
k = sub2ind([N M],i,j);
if i>1
ii=i-1; jj=j;
adj(k,sub2ind([N M],ii,jj)) = 1;
end
if i<N
ii=i+1; jj=j;
adj(k,sub2ind([N M],ii,jj)) = 1;
end
if j>1
ii=i; jj=j-1;
adj(k,sub2ind([N M],ii,jj)) = 1;
end
if j<M
ii=i; jj=j+1;
adj(k,sub2ind([N M],ii,jj)) = 1;
end
end
end
如何改进以避免所有循环?
【问题讨论】:
-
不,这不是功课。我的最终目标是绘制这些点并在连接点之间画线作为图形。有趣的是,这些点不必停留在网格上..
标签: matlab matrix graph-theory