Per ogni vertice calcoliamo il numero di vertici a esso adiacenti. Se questo numero è uguale a , allora il vertice è pendente.
Esempio
I grafi riportati negli esempi hanno il seguente aspetto:
Nel primo esempio il grafo contiene due vertici di grado . Di conseguenza, in esso ci sono due vertici pendenti.
Nel secondo esempio non ci sono vertici di grado (pendenti).
Implementazione dell'algoritmo
Dichiariamo un array , dove — è il numero di vertici adiacenti al vertice .
#define MAX 1010
int m[MAX];Leggiamo la matrice di adiacenza del grafo non orientato. Per ogni arco incrementiamo di il valore di (il valore di verrà incrementato quando si considererà l'arco ).
scanf("%d",\&n);
memset(m,0,sizeof(m));
for (i = 0; i \< n; i++)
for (j = 0; j \< n; j++)
{
scanf("%d",\&val);
if (val) m[i]++;
}Se m[i] = 1, allora il vertice è collegato esattamente a un vertice, cioè è pendente. Contiamo il numero di tali vertici e salviamo il risultato nella variabile .
res = 0;
for (i = 0; i \< n; i++)
if (m[i] == 1) res++;Stampiamo la risposta.
printf("%d\n",res);