using System;
using System.Diagnostics;
namespace Algorithms
{
class LSAP
{
///
/// Lsap di burkard
///
/// num righe / colonne
/// costo assegnamento
/// duali righe
/// duali colonne
/// costi monodim. (indice i*n+j)
/// assegnamento ottimo
public int[] lsap(int n,ref int z, int[] Ys, int[] Yt, int[] CostoAss)
{
int[] Riga,dminus,dplus,Davanti;
int index,dd,CostoCorr,Ui=0,Vj,j0,w,vgl,ind;
bool[] label;
int i,j;
int[] Colonna;
Riga = new int[n];
dminus = new int[n];
dplus = new int[n];
Davanti = new int[n];
label = new bool[n];
Colonna = new int[n];
Trace.WriteLine("\n....................................Inizio procdura LSAP");
/* ................................ Inizializzazione variabili */
for(i=0;i alla Riga 0 e Colonna 1 c'e' il valore minore */
Colonna[i]=j0; /* clonna[0]=1 => alla Colonna 1, Riga 1 c'e' il valore minore */
}
} /* END FOR 2 */
/* ...................................INIZIALIZZAZIONE DI Yt IN BASE AI */
/* RISULTATI PRECEDENTI */
for (j=0;j0)
{ CostoCorr = CostoAss[i*n+j] - Ui;
if (CostoCorrvgl)
{ dminus[i] = vgl;
Davanti[i] = w;
}
}
} /* END FOR 130 */
} /* END FOR 105 */
for (;;) /* FOR 400 */
{ w=Davanti[index];
Riga[index]=w;
ind=Colonna[w];
Colonna[w]=index;
if(w==j)
break;
index = ind;
} /* END FOR 400 */
/* ............................................................. */
for(i=0;i