PDA

View Full Version : [C] liste adiacenza in/out grafo


mikael_c
18-11-2013, 10:46
Dovrei creare delle liste Adiacenza in ingresso ed Uscita , nel codice che sto implementando utilizzo i seguenti parametri :
unsigned Adj[1000][1000] ; /* lista di adiacenza grafo generato */
unsigned Adj1[1000][1000] ; /* lista di incidenza del grafo generato */
unsigned nAdj[1000] ; /* numero di adiacenti in lista di adiacenza */
unsigned nAdj1[1000] ; /* numero di incidenti in lista di incidenza */

Volevo sapere come creare le liste di Adiacenza in ingresso ed Uscita rispettando i parametri riportati sopra, va bene così?
unsigned AdjOut[1000][1000] ; /* lista di adiacenza grafo generato OutDegree */
unsigned Adj1Out[1000][1000] ; /* lista di incidenza del grafo generato OutDegree */
unsigned nAdjOut[1000] ; /* numero di adiacenti in lista di adiacenza OutDegree */
unsigned nAdj1Out[1000] ; /* numero di incidenti in lista di incidenza OutDegree*/

unsigned AdjIn[1000][1000] ; /* lista di adiacenza grafo generato InDegree */
unsigned Adj1In[1000][1000] ; /* lista di incidenza del grafo generato InDegree */
unsigned nAdjIn[1000] ; /* numero di adiacenti in lista di adiacenza InDegree */
unsigned nAdj1In[1000] ; /* numero di incidenti in lista di incidenza InDegree*/

e se vanno inizializzate nella procedura di generazione grafo nel seguente modo:
Nel caso della lista dell out degree
AdjOut[i][nAdjOut[i]]=j;
nAdjOut[i]++;
Adj1Out[j][nAdj1Out[j]]=i;
nAdj1Out[j]++;

cenarius_88
20-11-2013, 01:16
ciao.
Io non so che codice hai messo su, ne tantomeno lo vorrei sapere xD
Tuttavia c'è una semantica di fondo che o non è chiara a me, o hai sbagliato tu...
Adj e Adj1 non sono liste, ma sono matrici di ordine 1000x1000
mentre
nAdj e nAdj1 sono dei vettori di contatori, per ogni i nAdj[i] indica quanti archi incidenti su/da quel nodo vi sono.
il problema da risolvere è come popolare queste matrici e questi vettori?

mikael_c
20-11-2013, 09:22
il problema in poche parole e quello di ordinare i vertici adiacenti(ovvero ogni successore è adiacente al predecessore )solo se il suo grado in uscita è minore, poi ogni volta che scegli un vertice decrementa i gradi in uscita dei vertici di cui è adiacente.