codice:
/* Grafo_orientato */
#include <stdio.h>
#include <stdlib.h>
struct arco {
int data;
struct arco *lista_ad;
};
typedef struct arco A;
struct vertice {
int data;
struct vertice *v_successivo;
A *lista_ad;
};
typedef struct vertice V;
V* aggiungi_v(V *origine, int d) {
V *n = (V*)malloc(sizeof(V)); n->data = d;
n->lista_ad = NULL;
n->v_successivo = origine;
return n;
}
V* cerca_v(V *origine, int d) {
if( origine == NULL )
return NULL;
if( origine->data == d )
return origine;
return cerca_v(origine->v_successivo, d);
}
V* aggiungi_a(V *origine, int a, int b) {
V *u;
u = cerca_v(origine, a);
A *v = (A*)malloc(sizeof(A));
v->data = b;
v->lista_ad = u->lista_ad;
u->lista_ad = v;
return origine;
}
void stampa_v_rec(V *origine) {
if( origine == NULL )
return;
printf("%d -> ", origine->data);
stampa_v_rec(origine->v_successivo);
}
void stampa_v(V *origine) {
if( origine == NULL ) {
printf("Non ci sono vertici!\n");
return;
}
printf("I vertici nel grafo sono:\n");
stampa_v_rec(origine);
printf("FINE.\n");
}
void stampa_a_rec(V *origine) {
if( origine == NULL )
return;
A *u;
u = origine->lista_ad;
while(u!=NULL){
printf("( %d, %d)\n", origine->data, u->data );
u = u->lista_ad;
}
stampa_a_rec(origine->v_successivo); }
void stampa_a(V *origine) {
if( origine == NULL ) {
printf("Non ci sono archi!\n");
return;
}
printf("Gli archi presenti nel grafo sono:\n");
stampa_a_rec(origine);
}
main() {
V *origine = (V*)malloc(sizeof(V));
origine = NULL;
origine = aggiungi_v(origine, 1);
origine = aggiungi_v(origine, 2);
origine = aggiungi_v(origine, 3);
origine = aggiungi_v(origine, 4);
origine = aggiungi_v(origine, 5);
origine = aggiungi_v(origine, 6);
origine = aggiungi_v(origine, 7);
origine = aggiungi_v(origine, 8);
origine = aggiungi_v(origine, 9);
origine = aggiungi_v(origine, 10);
aggiungi_a(origine, 1, 5);
aggiungi_a(origine, 2, 4);
aggiungi_a(origine, 1, 3);
aggiungi_a(origine, 4, 3);
aggiungi_a(origine, 4, 5);
aggiungi_a(origine, 5, 2);
aggiungi_a(origine, 1, 6);
aggiungi_a(origine, 6, 7);
aggiungi_a(origine, 9, 6);
aggiungi_a(origine, 7, 1);
aggiungi_a(origine, 7, 2);
aggiungi_a(origine, 5, 7);
aggiungi_a(origine, 8, 3);
aggiungi_a(origine, 4, 8);
aggiungi_a(origine, 4, 9);
aggiungi_a(origine, 5, 9);
aggiungi_a(origine, 10, 9);
aggiungi_a(origine, 10, 4);
aggiungi_a(origine, 10, 3);
stampa_v(origine);
stampa_a(origine);
}