Construire la matrice de contiguïté dans MATLAB

Tenir compte d'un ensemble de points disposés sur une grille de taille N-par-M.
Je suis en train de construire la matrice de contiguïté tels que
voisins points sont connectés.

Par exemple, dans une grille 3x3 avec un graphique:

1-2-3
| | |
4-5-6
| | |
7-8-9

Nous devrions avoir la correspondante de la matrice de contiguïté:

+---+------------------------------------------------------+
|   |   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  |
+---+------------------------------------------------------+

En bonus, la solution devrait fonctionner pour les deux 4 - et 8-connecté voisins points, c'est:

   o             o  o  o
o  X  o   vs.    o  X  o
o             o  o  o

Ce que le code que j'ai jusqu'à présent:

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

Comment cela peut-il amélioré pour éviter tous les le bouclage?

  • non, ce n'est pas de devoirs. Mon but ultime est de tracer ces points et de tracer des lignes entre les points de connexion sous forme de graphique. La chose intéressante est que ces points n'ont pas à rester sur la grille..
InformationsquelleAutor Dave | 2010-07-18