Numero di vertici pendenti 1#5080

Numero di vertici pendenti 1 (Editoriale)

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);