Buongiorno devo fare un progetto con i grafi per la prenotazione dei voli il mio problema è popolare il grafo...posto qui il codice:
#ifndef nodo_h
#define nodo_h
#define dim 50
typedef enum {false,true} boolean;
struct lista{
int nodo;
struct lista *succ;
};
struct nodo{
char *val;
int tipo;
boolean flag;
struct lista *inizio;
};
void inizializza(struct nodo *a[]);
void aggiungi_nodo(int tipo , char *v ,struct nodo *a[]);
void aggiungi_arco( int n1 , int n2 , struct nodo *grafo[]);
struct lista * inserisciInTesta(struct lista *inizio , int nodo);
void visitaInProfondita(int n , struct nodo *grafo[]);
#endif /* nodo_h */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nodo.h"
#define dim 50
void inizializza(struct nodo *a[])
{
int i;
for(i=0 ; i<dim ; i++)
a[i]=NULL;
}
void aggiungi_nodo(int tipo , char *v ,struct nodo *a[])
{
int t=tipo-1;
if(a[t]==NULL)
a[t]=malloc(sizeof(struct nodo));
a[t]->tipo=tipo;
a[t]->val=v;
a[t]->flag=false;
a[t]->inizio=NULL;
}
void aggiungi_arco( int n1 , int n2 , struct nodo *grafo[])
{
grafo[n1-1]->inizio=inserisciInTesta(grafo[n1-1]->inizio,n2);
grafo[n2-1]->inizio=inserisciInTesta(grafo[n2-1]->inizio,n1);
}
struct lista *inserisciInTesta(struct lista *inizio , int nodo)
{
struct lista *temp= malloc(sizeof(struct lista));
temp->succ=inizio;
temp->nodo=nodo;
return temp;
}
void visitaInProfondita(int n , struct nodo *grafo[])
{
struct lista *temp=grafo[n-1]->inizio;
printf("\n nodo: %d città: %s" , n , grafo[n-1]->val);
grafo[n-1]->flag=true;
while(temp !=NULL)
{
if(grafo[(temp->nodo)-1]->flag ==false)
visitaInProfondita(temp->nodo , grafo);
temp=temp->succ;
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "Graph.h"
#include "List.h"
#include "nodo.h"
#define dim 50
int main() {
int scelta;
int sceltaUt;
int sceltaAmministratore;
char email;
char pwd;
// Graph G = NULL;
char emailAmministratore;
char pwdAmministratore;
char deleteDestinazione;
struct nodo *grafo[dim];
char citta;
// int n = 0,
int num;
while((scelta = menu())){
switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
case 1:
printf("Inserisci email: ");
scanf("%s", &emailAmministratore);
printf("Inserisci password(max 7 caratteri): ");
scanf("%s", &pwdAmministratore);
while((sceltaAmministratore = menuAmministratore())){
switch (sceltaAmministratore) {
case 1: //stampa archivio
inizializza(grafo);
aggiungi_nodo(1,"Napoli",grafo);
aggiungi_nodo(2,"Milano",grafo);
aggiungi_nodo(3,"Genova",grafo);
aggiungi_nodo(4,"Firenze",grafo);
aggiungi_nodo(5,"Roma",grafo);
aggiungi_nodo(6,"Torino",grafo);
aggiungi_nodo(7,"Venezia",grafo);
aggiungi_nodo(8,"Palermo",grafo);
aggiungi_nodo(9,"Bari",grafo);
aggiungi_nodo(10,"Perugia",grafo);
aggiungi_nodo(11,"Parma",grafo);
aggiungi_nodo(12,"Reggio Calabria",grafo);
aggiungi_nodo(13,"Trento",grafo);
aggiungi_nodo(14,"Aosta",grafo);
aggiungi_nodo(15,"Ancona",grafo);
aggiungi_nodo(16,"Pescara",grafo);
aggiungi_nodo(17,"Potenza",grafo);
aggiungi_nodo(18,"Catania",grafo);
aggiungi_nodo(19,"Reggio Emilia",grafo);
aggiungi_nodo(20,"Cagliari",grafo);
aggiungi_arco(1,2,grafo);
aggiungi_arco(1,3,grafo);
aggiungi_arco(1,4,grafo);
aggiungi_arco(3,4,grafo);
aggiungi_arco(2,3,grafo);
aggiungi_arco(1,5,grafo);
aggiungi_arco(5,6,grafo);
aggiungi_arco(5,8,grafo);
aggiungi_arco(6,7,grafo);
aggiungi_arco(7,8,grafo);
aggiungi_arco(3,9,grafo);
aggiungi_arco(2,10,grafo);
aggiungi_arco(9,11,grafo);
aggiungi_arco(6,11,grafo);
aggiungi_arco(11,12,grafo);
aggiungi_arco(12,4,grafo);
aggiungi_arco(2,13,grafo);
aggiungi_arco(13,9,grafo);
aggiungi_arco(14,8,grafo);
aggiungi_arco(7,15,grafo);
aggiungi_arco(15,16,grafo);
aggiungi_arco(6,17,grafo);
aggiungi_arco(17,18,grafo);
aggiungi_arco(18,19,grafo);
aggiungi_arco(13,19,grafo);
aggiungi_arco(19,20,grafo);
aggiungi_arco(20,2,grafo);
visitaInProfondita(1,grafo);
printf("\n\n");
break;
case 2: //inserisci
printf("Inserisci nuemro destinazione:\n");
scanf("%d", &num);
printf("Inserisci città:\n");
scanf("%s", &citta);
break;
case 3://elimina tratta e destinazione
printf("Inserisci destinazione da eliminare: ");
scanf("%s", &deleteDestinazione);
break;
}
}
return 0;
break;
case 2:
while((sceltaUt = menuUtente())){
switch (sceltaUt) {
case 1:
printf("Inserisci l'email: ");
scanf ("%s", &email);
printf("Inserisci password(max 7 caratteri): ");
scanf("%s", &pwd);
printf("\niscrizione effettuata con successo");
break;
case 2:
printf("Inserisci l'email: ");
scanf ("%s", &email);
printf("Inserisci password(max 7 caratteri): ");
scanf("%s", &pwd);
printf("accesso effettuata con successo");
break;
}
}
return 0;
case 3: /*Se l'utente vuole uscire */
printf("Grazie per aver scelto il servizio di gestione prenotazione voli, torna a trovarci!\n");
return 0;
break;
default: /*Se l'utente sbaglia ad inserire il numero*/
printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
break;
} /*Fine switch*/
} /*Fine do*/
return 0;
} /*Fine main*/
Il problema è che io voglio stampare le città senza fare la visita in profonditi...potete aiutarmi a risolvere questo problema?
Grazie in anticipo