View Full Version : [C]costruzione vettore
mikael_c
01-02-2014, 09:50
Se ho tipo 4 vertici ad esempio,v1 ha out deg =3,v2 ha out deg =1,v3 ha out deg =2, v4 ha out deg =1.Come posso scrivere un vettore costituito da tutti quei vertici di grado minore?
nel caso dell'esempio il vettore deve contenere [vertice 4,vertice2..]
Daniels118
03-02-2014, 10:14
Cosa sarebbero questi vertici?
Sarebbe meglio che spiegassi cosa vuoi realizzare, in questo modo è più probabile che arrivi la soluzione migliore invece della spiegazione ad una soluzione non ottimale.
mikael_c
04-02-2014, 08:45
i vertici di un grafo rappresentato con matrice di adiacenza tipo :
101
001
101
nell esempio il vertice 1 ha grado in uscita 2 (outdegree),il vertice 2 ha grado in uscita 1 (outdegree), il vertice 3 ha grado in uscita 2 (outdegree).
dovrei scrivere un vettore costituito da tutti quei vertici di grado minore.
Daniels118
05-02-2014, 13:08
Prima di tutto devi stabilire in che forma deve essere l'output. Ad esempio potresti fare un vettore di n elementi binari, per ognuno dei quali l'indice rappresenta il vertice e il valore indica se il grado è 1 o diverso da 1.
Oppure potresti fare un vettore di lunghezza variabile in cui ogni elemento rappresenta un vertice di grado 1 e il valore dell'elemento indica qual'è il vertice.
In ogni caso l'algoritmo dovrebbe essere questo:
un ciclo for scandisce le righe;
all'interno del ciclo inizializzi un contatore;
un altro ciclo scandisce le colonne relative a quella riga;
se la cella vale 1, incrementa il contatore;
a fine ciclo, se il contatore è uguale a 1 inserisce l'elemento nel vettore;
qui si chiude il primo ciclo e termina il tuo algoritmo.
mikael_c
05-02-2014, 14:11
nel caso del codice che ho riportato sotto come si può fare praticamente?
(tipo ogni volta che confronto gli elementi di riga, vado a vedere tutti i gai in uscita(nAdj[]) vedi quello minimo e lo scrivo in una variabile)
for(i = 0; i < n; i++)
{for(j=0;j<n;j++)
if(j!=i)
if(((float)rand()/RAND_MAX)< p)
{m[i][j]=1;
Na++;
Adj[i][nAdj[i]]=j;
nAdj[i]++;
Adj1[j][nAdj1[j]]=i;
nAdj1[j]++;
}
else
m[i][j]=0;
}
Daniels118
05-02-2014, 14:23
Il codice che hai postato è alquanto mistico. Prova ad implementare solo quanto hai richiesto all'inizio.
mikael_c
05-02-2014, 14:30
rappresenta la matrice di adiacenza creata in maniera random, Adj rappresenta la lista di adiacenza. nadJ[]equivale al grado in uscita.
mi potresti far capire a livello pratico come scrivere quello che mi hai detto?
e sul codice che uso non si può fare?
Daniels118
05-02-2014, 14:54
Bene. Visto che nAdj è il vettore dei gradi di adiacenza, ti basterà filtrare da tale vettore quelli con grado 1:
int vDeg1[n];
nDeg1 = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
//...
}
if (nAdj[i] == 1) {
vDeg1[nDeg1++] = i;
}
}
Era questo che ti serviva?
mikael_c
05-02-2014, 16:42
il vettore deve contenere non il grado minore, ma i vertici del grafo con grado minore.
io ho capito tipo che Adj[i][nAdj[i]]=j; mi da il vertice però non so come inserire in un vettore i vertici con grado minore.
es.tipo vertice 1 a grado 3 ,vertice 2 a grado 1,vertice 3 a grado 4
nel vettore andrà vettore[[vertice2],[vertice3],[vertice4]]
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.