|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
[C]costruzione vettore
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..] Ultima modifica di mikael_c : 03-02-2014 alle 09:20. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
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. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
[c] costruzione vettore
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) Codice:
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; } |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Il codice che hai postato è alquanto mistico. Prova ad implementare solo quanto hai richiesto all'inizio.
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
[c] costruzione vettore
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? |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Bene. Visto che nAdj è il vettore dei gradi di adiacenza, ti basterà filtrare da tale vettore quelli con grado 1:
Codice:
int vDeg1[n]; nDeg1 = 0; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { //... } if (nAdj[i] == 1) { vDeg1[nDeg1++] = i; } } |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
[C]costruzione vettore
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]] |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:14.