mmh...dici che la funzione ( ) somma non va, ma non hai postato il codice...

supposto che somma() non faccia altro che sommare dei numeri,
e, in particolare, somma(n1, n2) = n1 + n2 :

codice:
/* Dovrebbe andare, ma puoi anche non fare caso ai vari
* cambiamenti nella funzione minimo() */

int minimo(int i, int *c, int *r)
{ 
	int	j;		
	int	min;
	char	flag;
	int 	testgt; /* Questa č un'aggiunta. */
	int 	sum;    /* Anche questa. */

	min	= -1;	
	for (j = 0; j < (nodi - 1); j++) {
		flag 	= 0;
		testgt	= i < j ? 1 : 0;
                /* La somma. */
		sum 	= (testgt) 
			? (l[i + 1][j + 1].dato + Dvec[j].dato)
			: (l[j +1 ][i + 1].dato + Dvec[j].dato);
		min	= minore(sum, min, &flag);

		(testgt) 
			? printf("se i < j %d\n", min)
			: printf("se i > j sono nell'else %d\n", min);
		(testgt) 
			? (*c = j + 1, (flag) ? (*r = i + 1) : 0)
			: (*c = i + 1, (flag) ? (*r = j + 1) : 0);
	}	
	return min;
}

/* Dovrebbe essere corretta. */	
int minore(int a, int b, char *flag)
{
	if ((b != -1) && (a == 0 || !(a < b)))
		return b;
	*flag = 1;
	return a;
}
spero di essere stato utile

___