Java - array multirow

0

Ecco la mia situazione: un'azienda ha x numero di dipendenti e x numero di macchine. Quando qualcuno è malato, il programma deve dare la migliore soluzione possibile di persone sulle macchine. Ma i dipendenti non possono lavorare su ogni macchina. Ho bisogno di un codice per creare piccoli gruppi di possibili soluzioni.

questo è un esempio statico int privato [] [] arrayCompetenties = {{0,0,1,0,1}, {1,0,1,0,1}, {1,1,0,0,1}, {1,1, 1,1,1}, {0,0,0,0,1}}; = > la riga è per le persone e le colonne sono per le macchine

    m1  m2  m3  m4  m5  m6  m7
p1  1               1       
p2      1   1   1   1       
p3          1       1       1
p4      1       1       1   
p5  1       1       1       1
p6              1   1   1   1
p7  1       1   1   1   1   1

la mia domanda = > con quale codice collego tutte le persone alla macchina in gruppi (tutte le possibilità)

come:

p1 - > m1, p2- > m2, p3 - > m3, p4- > m4, p5 - > m5, p6- > m6

p1 - > m1, p2- > m3, p3 - > m3, p4- > m4, p5 - > m5, p6- > m6

p1 - > m1, p2- > m4, p3 - > m5, p4- > m4, p5 - > m5, p6- > m6

p1 - > m1, p2- > m5, p3 - > m3, p4- > m4, p5 - > m5, p6- > m6

p1 - > m1, p2- > m2, p3 - > m3, p4- > m4, p5 - > m5, p6- > m6

....

Ho bisogno di un ciclo buth come? = D

grazie!

    
posta CollinVdv 07.04.2012 - 19:41
fonte

2 risposte

2

Penso che tu stia cercando di generare tutte le permutazioni di macchine e utenti. Dai un'occhiata a quel link, specialmente sugli algoritmi usati per generare permutazioni.

Ricorda che il numero di permutazioni per n macchine / utenti è n! (n factorial, o n * (n-1) * (n-2) * ... * 2 * 1), che cresce estremamente rapidamente - per 10 utenti, 3,6 milioni di possibilità e per un'azienda di 50 persone, stai guardando a 3.0 * 10 ^ 64 combinazioni diverse, che non si adattano a tutti i computer del mondo.

    
risposta data 07.04.2012 - 20:13
fonte
1

Il modo più semplice per risolverlo è con la ricorsione. Quello che segue è molto pseudocodice perché le strutture dati non sono banali, ma ti viene l'idea:

printMachineAssignments(person, assignedMachines)
    for every machine in person's competencies that's not in assignedMachines
        assign person to machine
        add machine to assignedMachines
        if no more people
            print assignments to the screen
        else
            printMachineAssignments(person + 1, assignedMachines)
    
risposta data 07.04.2012 - 20:53
fonte

Leggi altre domande sui tag