Δίνονται δύο δοχεία χωρητικότητας Α και Β λίτρων και μια πηγή με άφθονο νερό. Επιτρέπονται μόνο τρεις ενέργειες: γέμισμα ενός δοχείου μέχρι πάνω, άδειασμά του εντελώς, και μεταφορά νερού από το ένα στο άλλο μέχρι να γεμίσει ή να αδειάσει το πηγαίο.
Ζητείται να μετρήσουμε ακριβώς Στόχος λίτρα σε κάποιο από τα δύο δοχεία.
Η γενική μέθοδος αντιμετωπίζει το πρόβλημα ως αναζήτηση γράφου. Κάθε κατάσταση είναι ένα ζεύγος (waterA, waterB) και οι ακμές είναι οι έξι δυνατές ενέργειες. Χρησιμοποιούμε BFS (Breadth-First Search) για να βρούμε το συντομότερο μονοπάτι από (0, 0) στην πρώτη κατάσταση που περιέχει τον στόχο.
Υπάρχει και αναλυτική κατανόηση: με επαναλαμβανόμενο γέμισμα του Α και άδειασμα στο Β (ή αντίστροφα), παράγουμε όλα τα πολλαπλάσια του ΜΚΔ(Α,Β) μέχρι το lcm(Α,Β). Αυτό είναι η ουσία του θεωρήματος Bézout: υπάρχουν ακέραιοι x,y ώστε:
Άρα κάθε πολλαπλάσιο του ΜΚΔ είναι εφικτό. Η πρακτική εφαρμογή:
| Δοχεία | Στόχος | ΜΚΔ | Λύση; | Ελάχ. Κινήσεις |
|---|---|---|---|---|
| 5 και 3 | 4 lt | 1 | ✅ Ναι | 6 |
| 7 και 5 | 6 lt | 1 | ✅ Ναι | 8 |
| 10 και 7 | 9 lt | 1 | ✅ Ναι | — |
| 6 και 4 | 2 lt | 2 | ✅ Ναι | 2 |
| 6 και 4 | 3 lt | 2 | ❌ Όχι | — |
| 9 και 6 | 4 lt | 3 | ❌ Όχι | — |
Ο χώρος καταστάσεων έχει (Α+1)×(Β+1) κόμβους, άρα ο BFS τρέχει σε O(Α·Β) χρόνο και μνήμη — πρακτικά στιγμιαίο για τα μεγέθη του παιχνιδιού.
| Εντολή | Α | Β |
|---|---|---|
0Αρχή |
0 | 0 |