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:
ecodice: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; }
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)![]()

Rispondi quotando