OK...forse sbaglio ma non capisco come faccia a compilare....se poi compila direi che
avresti qualche problema in esecuzione
coordinate la scriverei così e la metterei prima di leggi_grafo (così ti accorgi che in effetti
ci vuole il puntatore semplice e non il doppio):
leggi_vertici invece temo che la devi proprio riscrivere....dubito che possa mai funzionare.codice:int coordinate(struct nodo *testa, int primovalore) // quà non passi un array di puntatori ma un array di strutture { struct nodo *nuovo; int valorecorrente; double x; double y; // *testa = NULL; non va proprio bene questo. valorecorrente = primovalore; while (!feof(fdata) && primovalore == valorecorrente) { fscanf(fdata,"%lf %lf", &x, &y); //nuovo = (struct nodo *) malloc (sizeof(struct nodo)); non devi allocare memoria...ci hai già pensato quando hai creato l'array. //nuovo->x = x; //nuovo->y = y; //*testa = nuovo; testa->x = x; testa->y = y; testa->elencoVerticiCollegati = NULL; // E' meglio che la inizializzi la lista... printf("\n%lf %lf", (*testa)->x, (*testa)->y); fscanf(fdata,"%d",&valorecorrente); testa++; // Vai al valore successivo dell'array } return valorecorrente; }
Qualche hint:
- leggi_vertici dovrebbe vedere (per ogni nodo) se la lista dei vertici collegati è già stata creata (controllando se elencoVerticiCollegati è NULL) se non lo è allora la dovrà creare con qualcosa del tipo #elencoVerticiCollegati = malloc(....)#, altrimenti scorrerà tale lista ed imposterà il numero del vertice collegato (se leggo record 2) oppure il peso se (leggo record 3); ovviamente dovrai dire alla funzione (che non ne sa nulla) se sta leggendo il record 2 o il record 3.
Temo che devi studiarti un po' meglio la struttura dati e l'uso delle liste linkate
perchè per me (ma posso sbagliare) quello che hai scritto difficilmente funzionerà.
Buon lavoro

 
			
			
 
					
					
					
						 Rispondi quotando
  Rispondi quotando