05. maj 2003 - 12:50Der er
21 kommentarer og 2 løsninger
Antal muligheder
Hvis jeg har tre rutepar A til E B til D C til A
Hvordan finder jeg ud af hvor mange muligheder der er for at kombinere turene? eneste krav er at efter turen er alle blevet kørt "hjem" Så A-D-E-C-A-B duer feks. ikke
man skal både kunne køre: feks. A-B-C-E-D-A
og A-E-B-C-D-A
osv.
Hvordan laves fornuftig kode der kan beskrive/løse dette
Hvis du skal starte og slutte i A, og skal bruge destinationerne op, så har du (4 * 3 * 2 * 1) muligheder, altså som formel (n er antallet af første destinationer):
Een rute: 1 mulighed To ruter: 6 muligheder Tre ruter: -- hmm kompliceret: Du starter på en rute, 3 muligheder, derefter har du to ikke påbegyndte ruter, 6 muligheder og afslutningen af din første rute, som kan placeres på 5 forskellige pladser, altså ialt 90 ruter.
Hvis du skal beregne brutto-antallet af mulige ruter skal man for hver tilkommen rute gange med n*(2n-1), dvs. 3 ruter:
3*5*2*3*1*1 = 90
og så har vi den generelle formel (?);
men så har du det samme punkt to gange (en gang som start og en gang som slut) og det vil sige, at vi skal fjerne alle forekomster af slutpunkt a, som kommer efter startpunkt a efter c, samt forekomster hvor de i øvrigt er naboer ...
dvs. 1. startpunkt c = 6 muligheder 1. startpunkt a = 30 muligheder 1. startpunkt b, 2 forskellige: - c foran første forekomst af a = 4 muligheder - a foran første forekomst af c = 15 muligheder
jes, problemet er at Skalerbar's problem er lidt flydende, jeg antager en masse og du også noget, vi ved ikke om det er begrændsninger i antal mellemstationer, vi antager at der ikke må være mere end 6 ialt, vi antager at der må være 5, at unødvendige mellemstationer ikke må forekomme etc.
Derfor kan vi ikke sigde at nogle combier reelt er udelukket, umiddelbart ville der være et uendeligt antal combier ud fra den måde spørgsmålet er stillet, da der ikke er taget forbehold for at der ikke må være unødvendige mellemstop.
men når han bruger ordet 'hjem' i sin beskrivelse, har vi jo taget udgangspunkt i, at det f.eks. kunne være en bil, som skulle samle nogen op og sætte dem af -- og så ville det være unaturligt ikke at stå af, første gang man har chancen ...
Forøvrigt behøver vi slet ikke at gå ud fra den slags for at få astronomiske tal, ved 4 ture er det 28*90 = 2520 teoretiske, ved 5 ture 45*2520 = 113400 ture, ved 6 ture 66*113400 = 7.484.400 ture . . . ved 10 ture 190*12504636144000 = 2.375.880.867.360.000
og vi er stadig ved den simpleste form for tur: eet start-punkt og eet slutpunkt !~|
CheckOkCCombi(char *pos) { // chekc de 3 mulig ruter // A til E // find et A med et E bagefter if (!AtilE(pos)) return ERROR; // B til D // find B med D efter if (!BtilD(pos)) return ERROR; // C til A // find C med et A efter if (!CtilA(pos)) return ERROR;
// hvis ingen af disse er forkert må det være en og løsning return OK; }
Resten må jeg overlade som en øvelse pga. tidsmangel, hvis du selv udfylder det hele kan jeg evt. se på fejl.
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.