|
|||||||
|
|
|
![]() |
|
|
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 15:58. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:28.





















