Buondì, oggi voglio calcolare indegree e outdegree di un nuodo di un grafo.Che sono, rispettivamente, il numero di archi in entrata e in uscita dal nodo.
In pratica però l'out-degree del nodo è la lunghezza della lista di adiacenza che parte dal nodo, dalla sua "head" per come l'ho definito io. Mentre l'indegree di un nodo è il numero di volte che il nodo compare nella lista di adiacenza di qualche altro nodo.
Queste sono le due funzioni che ho creato io:
codice:
int outdegree (WGRAPH g, NODE x, int d){
LIST r;
if(g[x].visited){ //se è stato usato
d=0; //la lunghezza della lista che parte dal nodo per ora è 0
for(r = g[x].head; r != NULL; r = r->next){ //inizio a scorrere la lista che parte dal nodo (dalla sua head) fino alla fine
d += 1; //ogni volta che scorro la lista di una posizione conto il passaggio
}
return d;
}
return 0;
}
e
codice:
int indegree (WGRAPH g, NODE x){
int d;
LIST r;
int s = 0;
LIST p = g[x].head;
d = p->label; //d prende l'etichetta del nodo di cui voglio conoscere l'indegree
for(int j=0; j<MAX; j+=1){ //inizio a scorrere il grafo
if(g[j].used){ //se il nodo è usato
for(r = g[j].head; r != NULL; r = r->next){ //inizio a scorrere la sua lista di adiacenza
if(r->label == d) //se trovo un valore in tale lista uguale all'etichetta del nodo di cui voglio l'indegree
s = s+1; //allora prendi nota incrementando di 1
}
}
}
return s;
}
C'è sempre qualcosa che sbaglio perchè mi compila, ma poi non mi calcola proprio nessuno dei due valori.
Inoltre per quel che riguarda l'indegree non capisco una cosa: e se esistono due nodi che hanno la stessa etichetta? In quel caso mi posso trovare in qualche lista di adiacenza lo stesso valore, ma che proviene da i due nodi diversi e così mi falsa tutto. Quindi cosa dovrei fare in quel caso?
Grazie in anticipo a chiunque voglia aiutarmi (e un grazi ulteriore a Scara95 per l'altra volta)