Costruisci la matrice di adiacenza in MATLAB

Considera una serie di punti disposti su una griglia di dimensioni N-by-M. Sto cercando di build la matrice di adiacenza in modo tale che i punti vicini siano connessi.

Ad esempio, in una griglia 3×3 con un grafico:

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

Dovremmo avere la corrispondente matrice di adiacenza:

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

Come bonus, la soluzione dovrebbe funzionare sia per i punti vicini a 4 che a 8, ovvero:

  oooo o X o vs. o X o oooo 

Questo è il codice che ho finora:

 N = 3; M = 3; adj = zeros(N*M); for i=1:N for j=1:M k = sub2ind([NM],i,j); if i>1 ii=i-1; jj=j; adj(k,sub2ind([NM],ii,jj)) = 1; end if i1 ii=i; jj=j-1; adj(k,sub2ind([NM],ii,jj)) = 1; end if j<M ii=i; jj=j+1; adj(k,sub2ind([NM],ii,jj)) = 1; end end end 

Come può essere migliorato per evitare tutto il loop?