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)