/* * MatrimoniStabili.java * * Created on November 3, 2007, 4:28 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package org.algoritmica.alvie.algorithm; import org.algoritmica.alvie.datastructure.List; import org.algoritmica.alvie.datastructure.ListI; import org.algoritmica.alvie.datastructure.Array; import org.algoritmica.alvie.datastructure.ArrayI; import org.algoritmica.alvie.information.ComparableI; import org.algoritmica.alvie.information.IntInformation; /** * * @author ***** *********** */ public class MatrimoniStabili> { private ListI[] m_preferita; private int[][] m_rango; private ListI m_celibe; private ArrayI m_abbinato; private IntInformation maschio; private IntInformation femmina; public MatrimoniStabili(ListI[] preferita, int[][] rango, ListI celibe, ArrayI abbinato) { m_preferita = preferita; m_rango = rango; m_celibe = celibe; m_abbinato = abbinato; } public void stableMarriage() { while(m_celibe.size() != 0) { maschio = m_celibe.head(); femmina = m_preferita[maschio.intValue()].head(); m_preferita[maschio.intValue()] = m_preferita[maschio.intValue()].tail(); if(m_abbinato.elementAt(maschio.intValue()).isLessThan(new IntInformation(0))) { m_abbinato.setAt(maschio, femmina.intValue()); m_celibe = m_celibe.tail(); } else if(m_rango[femmina.intValue()][maschio.intValue()] < m_rango[femmina.intValue()][m_abbinato.elementAt(femmina.intValue()).intValue()]) { m_celibe.set(m_abbinato.elementAt(femmina.intValue()), m_celibe.tail()); m_abbinato.setAt(maschio, femmina.intValue()); } } } }