Αν παρατήρησες στην εικόνα παραπάνω το πρόβλημα δίνει μια λύση (από τις πολλές) βάσει ενός πίνακα (με λίστες γίνεται αυτός), όπου τα ζευγάρια πχ 1,3 δηλώνονται και ως 3,1, και έτσι η σειρά 1 έχει το 3 ως μη αποδεκτό και η σειρά 3 το ένα ως μη αποδεκτό.
Αντί να ψάχνουμε τις λίστες αυτές σειριακά, δουλεύουμε με πίνακα κατακερματισμού και βγαίνει άμεσα η αναζήτηση (αν υπάρχει ή όχι). Υπάρχει και άλλος τρόπος, να κοιτάμε τα νούμερα της λίστας "αποκλεισμών" (για κάθε νούμερο που εξετάζουμε), αλλά με την προυπόθεση ότι και η λίστα των υπαλλήλων είναι και αυτή με κλειδί. Έτσι αν έχουμε π.χ. 30 σχέσεις (τριάντα ζευγάρια όπως το (1,3)), ξεκινάμε από το πρώτο που θεωρούμε ότι θα μείνει, έστω το 1 και "αποκλείουμε" το 3 (βάζουμε 0 εκεί που ήταν 3), μετά πάμε στο επόμενο ζευγάρι, αν το πρώτο νούμερο το βρίσκουμε στο πίνακα 0 τότε το αφήνουμε και πάμε στο επόμενο, μέχρι που και τα τριάντα θα τελειώσουν. Εδώ οι διαφορετικές λύσεις βγαίνουν με ανακάτεμα των κανόνων (των ζευγαριών).
Και ο πρώτος τρόπος (όπως την υλοποίησα) όπως και ο άλλος τρόπος, έχουν την εφαρομογή ανάλογα με το τι έχουμε. Αν έχουμε περισσότερα ζευγάρια από του υπαλλήλους τότε συμφέρει ο πρώτος, αν έχουμε πολλούς υπαλλήλους με μικρό αριθμό ζευγαριών συμφέρει ο δεύτερος.
Ασφαλώς αν μιλάμε για έναν αλγόριθμο που θα έβρισκε όλες τις λύσεις..τότε θέλουμε χιλιετίες για να τις βρούμε! Να προσθέσω εδώ ότι στο δικό μου αλγόριθμο δεν επιλέγω μια τυχαία λύση, ώστε να δω αν βγαίνει, αλλά ξεκινάω με την παραδοχή ότι ο πρώτος διαθέσιμος από μια στοίβα είναι "καλεσμένος", και αποκλείω από τη στοίβα όσους δεν είναι συμβατοί με αυτόν, μετά πάω στον επόμενο (αν είναι 0 τότε πάω στο επόμενο κ.ο.κ). Για το λόγο αυτό πριν ξεκινήσω κάνω ένα ανακάτεμα. Έτσι κάθε φορά που τρέχουμε το πρόγραμμα έχουμε άλλη λύση! Επειδή γράφονται σε στοίβα, στο τέλος αφαιρούνται τα κενά και ζητάμε έναν αριθμό, αλλά θα πάρουμε λιγότερα αν δεν υπάρχει αυτός ο αριθμός, άρα ενδέχεται η λύση που θα βρεθεί να μην είναι ικανοποιητική! Οπότε πάμε για άλλη!