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?