rendered paste body/* * 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<I extends ComparableI<I>>{ private ListI<IntInformation>[] m_preferita; private int[][] m_rango; private ListI<IntInformation> m_celibe; private ArrayI<IntInformation> m_abbinato; private IntInformation maschio; private IntInformation femmina; public MatrimoniStabili(ListI<IntInformation>[] preferita, int[][] rango, ListI<IntInformation> celibe, ArrayI<IntInformation> 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()); } } }}