Newsgroup: it.comp.lang.c
Titolo: Interpretazione programma linguaggio C,simulazione algoritmo di dijkstra

ciao a tutti sono nuovo,mi hanno dato da studiare un programma in C
che simula un algoritmo di dijkstra..c è una parte che non capisco per
niente la scrivo qui a seguito,chi riesce può darmi una spiegazione
dettagliata di cosa fa?ci sono rikiami a funzioni lo so,in quei passi
basta ke mi dicate qui richiama la funzione per fare..poi ci penso
io..grazie
void build_path(void)
{
    PQUEUE *pq;
    COORD coordCorrenti, nodoAnalizzato;
    int i;
    pq = pqueue_new();
    pesi[start.row][start.col].distanza = 0;
    pesi[start.row][start.col].curve = 0;
    parent[start.row][start.col].row = -1;
    parent[start.row][start.col].col = -1;
    pqueue_insert(pq, start, 0);
    while (pqueue_popmin(pq, &coordCorrenti) == 0) {
	pops++;
	/* DEBUG INFORMATION */
	if (debug_level > 0)
	    printf("\nSelected (row,col)=(%d,%d).  Adding:\n",
coordCorrenti.row, coordCorrenti.col);
	/* FOREACH square adjacent to (row,col), call it drow(row,i),
dcol(col,i) */
	for (i = 0; i < 4; i++) {
	    int *curve_correnti;
	    int prossime_curve;
	    int *distanza_corrente;
	    int prossima_distanza;
	    nodoAnalizzato.row = coordCorrenti.row + delta[i].row;
	    nodoAnalizzato.col = coordCorrenti.col + delta[i].col;
 
	    if (nodoAnalizzato.row < 0 || nodoAnalizzato.row >= readed.row ||
nodoAnalizzato.col < 0 || nodoAnalizzato.col >= readed.col)
		continue;
 
	    prossima_distanza =
pesi[coordCorrenti.row][coordCorrenti.col].distanza +
map[nodoAnalizzato.row][nodoAnalizzato.col];
	    distanza_corrente =
&pesi[nodoAnalizzato.row][nodoAnalizzato.col].distanza;
	    prossime_curve =
pesi[coordCorrenti.row][coordCorrenti.col].curve;
	    curve_correnti =
&pesi[nodoAnalizzato.row][nodoAnalizzato.col].curve;
	    if (!isUguali(coordCorrenti, start) &&
		parent[coordCorrenti.row][coordCorrenti.col].row !=
nodoAnalizzato.row &&
		parent[coordCorrenti.row][coordCorrenti.col].col !=
nodoAnalizzato.col) {
		prossime_curve++;
	    }
	    if (prossima_distanza < *distanza_corrente ||
		prossima_distanza == *distanza_corrente && prossime_curve <
*curve_correnti) {
 
		if (debug_level > 0) {
		    printf("\t\t(%d,%d) Weight was/is: ", nodoAnalizzato.row,
nodoAnalizzato.col);
		    printf("%d/%d\n", *distanza_corrente, prossima_distanza);
		}
		*distanza_corrente = prossima_distanza;
		*curve_correnti = prossime_curve;
 
		parent[nodoAnalizzato.row][nodoAnalizzato.col].row =
coordCorrenti.row;
		parent[nodoAnalizzato.row][nodoAnalizzato.col].col =
coordCorrenti.col;
 
		pqueue_insert(pq, nodoAnalizzato, *distanza_corrente);
	    } else if (debug_level >= 5)
		printf("\t\t(%d,%d) Weight Stays: %d (would have been %d)\n",
nodoAnalizzato.row, nodoAnalizzato.col, *distanza_corrente,
prossima_distanza);
	}
	if (debug_level >= 10)
	    build_illustrate();
    }
    return;
}

Premetto non sono un programmatore e conosco il C a malapena, ma ...
- PQUEUE e COORD sono evidentemente due strutture create precedentemente;
- le istruzioni seguenti sono per la maggiorparte assegnazioni tra variabili
e valori particolari di strutture complesse;
- le istruzioni if (debug_level > 0) .... sono istruzioni di controllo per
un eventuale debug;
A mio parere non vi sono chiamate a funzioni o routine esterne.
Saluti
-- 
Angelo M. Figundio
figun...@tiscali.it