16. juli 2003 - 15:46Der er
14 kommentarer og 1 løsning
generering af turneringsplan
Hej jeg mangler noget java kode, som kan genere en turneringsplan. Turneringsplanen skal laves, så den kan tage n antal hold og derefter selv genere planen udfra, hvor mange hold der er. Det er selvfølgelig klart at turneringsplanen skal deles op i runder ud fra hvor mange hold der er (
Her er et simpelt forslag, der giver dig alle løsninger. Udskift værdien af n i toppen, hvis det ikke lige er 6 hold.
import java.util.*;
public class Turnering { static final int n = 6; // antal hold i turneringen static final int nrrunde = (n%2==1)?(n-1)/2:n/2; static final int antalrunder = n-1; static List c = new ArrayList(); static boolean used[]; static boolean r[][] = new boolean[antalrunder][n];
private static class Kamp { public int hold1,hold2; public Kamp(int hold1,int hold2) { this.hold1=hold1; this.hold2=hold2; } public String toString() { return hold1+"+"+hold2; } }
static void init() { for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { if (i<j) { c.add(new Kamp(i,j)); } } } used = new boolean[c.size()]; for (int i=0;i<used.length;i++) { used[i]=false; } for (int i=0;i<antalrunder;i++) { for (int j=0;j<n;j++) { r[i][j]=false; } } }
private static void tryit(int k,int runde,String losning) { if (k>=c.size()) { System.out.println("LØSNING: "+losning); return; } for (int i=0;i<c.size();i++) { if (!used[i]) { Kamp ci=(Kamp)c.get(i); if (r[runde][ci.hold1]==false && r[runde][ci.hold2]==false) { used[i]=true; r[runde][ci.hold1]=true; r[runde][ci.hold2]=true; if ((k+1)%nrrunde==0) { tryit(k+1,runde+1,losning+" "+ci+" | "); } else { tryit(k+1,runde,losning+" "+ci); } r[runde][ci.hold2]=false; r[runde][ci.hold1]=false; used[i]=false; } } } }
public static void main(String[] args) { init(); tryit(0,0,""); } }
Mange tak for kommentarene! Det er bare super de eventuelle rettelser som skal laves laver jeg selv, men mange tak for hjælpen til jer begge!
Hvis I vil have nogle point, så er jeg nødt til at få et svar fra jer i stedet for en kommentar.
Jeg ville godt have givet jer flere point, men det er desværre ikke muligt. Og siden at jeg nok kommer til at benytte arnes kode mest har jeg valgt at give pointen som følgende: arne 115 og erik 85.
(Erik, da jeg kørte din kode med 6 hold terminerede koden ikke ????)
Ok så var det bare min tålmodighed det var galt med. :-)
I det jeg skal bruge genereringen til skal jeg blot præsentere en mulig løsning ad gangen for en bruger, som så skal vælge hvilken turneringsplan vedkommen ønsker.
Jeg regner med at kunne lave det sådan at han får præsenteret den mulige løsning og hvis han ikke vil have den, så kører koden videre og finder den næste løsning. osv. Jeg håber på at kunne nedsætte genereringstiden på denne måde.
er der en der kan jeg stakkels fæ? hvad og hvordan skal jeg gøre for at få det til at virke?
håber på hjælp.
MVH DKR
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.