/** * Coltroller für das Rücksackproblem * * @author David * @version 18.5.06 */ public class Controll { Rucksack meinRucksack; //zum merken für das koefverfahren //wenn sie es nicht brauchen: weg damit private boolean [] gelöscht; private float [] koef; //brauche ich für mein "besseres" Verfahren private int[] x; //maximales gewicht private int max; //merker für aktuelles gewicht private int aktGewicht; //merker für aktuellen nutzen private int aktNutzen; //zwischenspeicher für den besten wert private int maxWert; //brauche ich für mein Verfahren private int Ngewicht =0; private int Nwert = 0; /** * Konstruktor für Objekte der Klasse Rucksack */ public Controll(Rucksack meiner) { meinRucksack = meiner; gelöscht = new boolean[meinRucksack.gibGewichte().length]; koef = new float [meinRucksack.gibGewichte().length]; x = new int[meinRucksack.gibGewichte().length]; max= 5000; aktGewicht= 0; aktNutzen= 0; maxWert=0; //alle merker werden als nicht gelöscht gekennzeichnet for (int i=0; i< gelöscht.length; i++) gelöscht[i]= false; } /** * methode die das koeffizientenverfahren implementieren soll * dazu werden dann das gewicht und der nutzen in dem feld rück am ende des verfahrens zurück gegeben. */ public int[] berechneKoef(){ int[] rück = new int[2]; boolean endeErreicht=false; //koef berechnen for (int i=0; i< meinRucksack.gibWerte().length; i++) koef[i]= meinRucksack.gibGewichte()[i]/meinRucksack.gibWerte()[i]; // merker für stelle int stelle =0; /** * ja und hier fehlt nun noch etwas */ rück[0]=aktGewicht; rück[1]=aktNutzen; return rück; } /** * mein verfahren */ public int[] berechneAlles(){ //rek aufruf sucheBestes(0,0,0); int[] rück = new int[2]; rück[0] = Ngewicht; rück[1] = Nwert; return rück; } /** * dito */ private void sucheBestes (int stufe, int gewicht, int wert){ if (stufe < meinRucksack.gibGewichte().length){ x[stufe]=1; sucheBestes(stufe + 1, gewicht + x[stufe]*meinRucksack.gibGewichte()[stufe],wert + x[stufe]*meinRucksack.gibWerte()[stufe]); x[stufe]=0; sucheBestes(stufe + 1, gewicht, wert); } else if (gewicht <=max && wert > maxWert){ Ngewicht = gewicht; Nwert = wert; maxWert=wert; } } }