|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2008
Messaggi: 116
|
[C] Cammini minimi su grafo non pesato
Salve a tutti, avrei bisogno di una mano con l'implementazione di un algoritmo che calcoli il cammino minimo tra i vertici su grafo non pesato.
Avevo pensato di utilizzare Dijkstra impostando il peso di ogni arco uguale a 1 (e fin qui penso di esserci), il programma l'ho finito ma solo ora mi accorgo che alcuni grafi non li "digerisce", mi spiego: Se, ad esempio, prendessi in considerazione questo grafo: ![]() Tutto funziona perfettamente, ogni percorso è ok... Se invece prendo quest'altro grafo: ![]() l'output che ottengo è: Codice:
Percorso piu' breve tra il nodo 0 e il nodo 3: 0 -> 4 -> 2 -> 3, con il costo di 3 distanza dal nodo 0 = 0, padre del nodo 0 = -1 distanza dal nodo 1 = 1, padre del nodo 1 = 0 distanza dal nodo 2 = 2, padre del nodo 2 = 4 distanza dal nodo 3 = 3, padre del nodo 3 = 2 distanza dal nodo 4 = 1, padre del nodo 4 = 0 Parte del codice: Codice:
typedef struct nodo { int valore, peso_arco, precedente; struct nodo *succ; }nodo_t; typedef struct nodo0 { int valore; struct nodo0 *succ; }nodo0_t; Codice:
int acquisisci_grafo(nodo_t *G[]) { int i, n; FILE *file_dati; file_dati = fopen("file_dati.txt", "r"); if (fscanf(file_dati, "%d", &n) != 1); /* Acquisizione numero vertici */ for (i = 0; (i < n); i++) { int j, nr_nodi_adiacenti; nodo_t *p, *testa; if (fscanf(file_dati, "%d", &nr_nodi_adiacenti) != 1); /* Numero di elementi adiacenti al nodo i */ testa = NULL; for (j = 0; (j < nr_nodi_adiacenti); j++) { p = malloc(sizeof(nodo_t)); p -> peso_arco = 1; /* Set del peso di ogni arco a 1 */ if (fscanf(file_dati, "%d %d", &p -> precedente, &p -> valore) != 1); p -> succ = testa; testa = p; } G[i] = testa; } fclose(file_dati); return(n); } e da file gli ho dato in input: Codice:
5 2 0 1 0 4 1 1 2 3 4 1 4 2 4 3 0 2 3 2 3 0 Grazie mille anticipatamente! EDIT: Risolto, il problema era nel file che gli davo in input, corretto quello funziona tutto perfettamente! Ultima modifica di dhabsot : 20-05-2013 alle 14:58. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:29.