Sebagai pembekal jag air, saya sentiasa tertarik dengan aspek praktikal dan teori tentang jag air. Satu masalah teori yang menarik yang mempunyai implikasi dunia nyata ialah masalah jag air. Dalam blog ini, saya akan membimbing anda untuk melaksanakan penyelesai masalah jag air di Jawa.
Memahami Masalah Jag Air
Masalah jag air adalah teka-teki klasik. Anda diberi dua jag dengan kapasiti (x) dan (y) liter, dan objektif untuk menyukat (z) liter air. Operasi yang boleh anda lakukan ialah:
- Isikan jag sepenuhnya.
- Kosongkan jag.
- Tuangkan air dari satu jag ke satu jag yang lain sehingga sama ada jag sumber kosong atau jag destinasi penuh.
Matlamatnya adalah untuk mencari urutan operasi ini yang akan menyebabkan mempunyai (z) liter air dalam salah satu jag.
Pelaksanaan Java Penyelesai Masalah Jag Air
Mari kita mulakan dengan mencipta kelas untuk mewakili keadaan jag.
kelas JugState { int jug1; int jug2; public JugState(int jug1, int jug2) { this.jug1 = jug1; ini.jug2 = jug2; } @Override public boolean equals(Objek o) { jika (ini == o) kembalikan benar; if (o == null || getClass() != o.getClass()) return false; JugState jugState = (JugState) o; return jug1 == jugState.jug1 && jug2 == jugState.jug2; } @Override public int hashCode() { return 31 * jug1 + jug2; } @Override public String toString() { return "Jug1: " + jug1 + ", Jug2: " + jug2; } }
iniJugStatekelas mewakili jumlah air semasa dalam setiap jag. Kami mengatasisamadanKod cincangkaedah untuk dapat menggunakan keadaan ini dalam struktur data sepertiHashSet.
Seterusnya, kami akan melaksanakan kelas penyelesai utama.
import java.util.*; kelas awam WaterJugSolver { private int capacity1; kapasiti int peribadi2; sasaran int peribadi; WaterJugSolver awam(int capacity1, int capacity2, int target) { this.capacity1 = capacity1; ini.kapasiti2 = kapasiti2; ini.sasaran = sasaran; } public List<JugState> solve() { Queue<List<JugState>> queue = new LinkedList<>(); Set<JugState> dilawati = new HashSet<>(); JugState initialState = new JugState(0, 0); List<JugState> initialPath = new ArrayList<>(); initialPath.add(initialState); queue.add(initialPath); visited.add(initialState); manakala (!queue.isEmpty()) { List<JugState> currentPath = queue.poll(); JugState currentState = currentPath.get(currentPath.size() - 1); if (currentState.jug1 == sasaran || currentState.jug2 == sasaran) { return currentPath; } Senarai<JugState> nextStates = getNextStates(currentState); untuk (JugState nextState : nextStates) { if (!visited.contains(nextState)) { List<JugState> newPath = new ArrayList<>(currentPath); newPath.add(nextState); queue.add(newPath); visited.add(nextState); } } } kembalikan nol; } private List<JugState> getNextStates(JugState currentState) { List<JugState> nextStates = new ArrayList<>(); // Isi jag 1 nextStates.add(new JugState(capacity1, currentState.jug2)); // Isi jag 2 nextStates.add(new JugState(currentState.jug1, capacity2)); // Jag kosong 1 nextStates.add(new JugState(0, currentState.jug2)); // Jag kosong 2 nextStates.add(new JugState(currentState.jug1, 0)); // Tuangkan dari jag 1 ke jag 2 int pourAmount = Math.min(currentState.jug1, kapasiti2 - currentState.jug2); nextStates.add(new JugState(currentState.jug1 - pourAmount, currentState.jug2 + pourAmount)); // Tuangkan dari jag 2 ke jag 1 tuangAmount = Math.min(currentState.jug2, kapasiti1 - currentState.jug1); nextStates.add(new JugState(currentState.jug1 + pourAmount, currentState.jug2 - pourAmount)); kembali nextStates; } public static void main(String[] args) { WaterJugSolver solver = new WaterJugSolver(3, 5, 4); Senarai<JugState> penyelesaian = solver.solve(); jika (penyelesaian != null) { untuk (keadaan JugState : penyelesaian) { System.out.println(keadaan); } } else { System.out.println("Tiada penyelesaian ditemui."); } } }
DalamWaterJugSolverkelas, kami menggunakan algoritma keluasan - carian pertama (BFS) untuk mencari penyelesaian. Theselesaikankaedah memulakan baris gilir untuk menyimpan laluan dan satu set untuk menjejaki keadaan yang dilawati. Kita mulakan dengan keadaan awal kedua-dua jag kosong.
ThegetNextStateskaedah menjana semua keadaan seterusnya yang mungkin daripada keadaan semasa dengan melaksanakan enam operasi yang dinyatakan sebelum ini.
Aplikasi Sebenar - Dunia dan Jag Air Kami
Masalah jag air mungkin kelihatan seperti teka-teki yang mudah, tetapi ia mempunyai aplikasi dalam bidang seperti pengurusan sumber dan pengoptimuman. Dalam konteks perniagaan jag air kami, memahami algoritma ini boleh membantu dalam senario seperti mengisi bekas air berskala besar dengan cekap.
Kami menawarkan pelbagai jenis jag air untuk memenuhi keperluan yang berbeza. Untuk aktiviti luar, kamiJag Air Luaran Keluli Tahan Karat Berkapasiti Besaradalah pilihan yang bagus. Ia boleh menampung sejumlah besar air, memastikan anda kekal terhidrat semasa pendakian yang lama atau perjalanan perkhemahan.
Jika anda memerlukan pilihan yang lebih mudah alih, kamiJag Mudah Alih 64oz Keluli Tahan Karatadalah sempurna. Ia mudah dibawa ke mana-mana, sama ada anda pergi ke gim atau menjalankan tugas.
Bagi mereka yang memerlukan lebih banyak simpanan air, kamiBotol Air Keluli Tahan Karat 64oz 128oz Gallonmenyediakan kapasiti yang anda perlukan.


Kesimpulan
Melaksanakan penyelesai masalah jag air di Jawa ialah cara terbaik untuk memahami algoritma seperti BFS dan cara ia boleh digunakan untuk masalah dunia sebenar. Sebagai pembekal jag air, kami komited untuk menyediakan produk berkualiti tinggi yang memenuhi keperluan simpanan air anda.
Jika anda berminat untuk membeli jag air kami atau mempunyai sebarang pertanyaan tentang produk kami, kami menggalakkan anda untuk menghubungi perbincangan perolehan. Kami di sini untuk membantu anda mencari penyelesaian jag air yang sempurna untuk keperluan anda.
Rujukan
- Pengenalan kepada Algoritma oleh Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
- Struktur Data dan Algoritma di Jawa oleh Robert Lafore
