Java'da su sürahisi problem çözücü nasıl uygulanır?

Dec 18, 2025

Mesaj bırakın

Bir su sürahisi tedarikçisi olarak su sürahilerinin pratik ve teorik yönlerinden her zaman etkilenmişimdir. Gerçek dünyaya etkileri olan ilginç teorik problemlerden biri de su sürahisi problemidir. Bu blogda, Java'da su sürahisi problem çözücüyü uygulama konusunda size rehberlik edeceğim.

Su Sürahisi Sorununu Anlamak

Su testisi problemi klasik bir bilmecedir. Size (x) ve (y) litre kapasiteli iki sürahi ve (z) litre suyu ölçme amacı veriliyor. Yapabileceğiniz işlemler şunlardır:

  1. Bir sürahiyi tamamen doldurun.
  2. Bir sürahiyi boşaltın.
  3. Kaynak sürahi boşalana veya hedef sürahi dolana kadar bir sürahiden diğerine su dökün.

Amaç, sürahilerden birinde (z) litre su olmasını sağlayacak bu işlemler dizisini bulmaktır.

Su Sürahisi Problem Çözücünün Java Uygulaması

Sürahilerin durumunu temsil edecek bir sınıf oluşturarak başlayalım.

class JugState { int jug1; int sürahi2; public JugState(int jug1, int jug2) { this.jug1 = jug1; this.sürahi2 = sürahi2; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Jug Durumu jug Durumu = (Jug Durumu) 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; } }

BuSürahi Durumusınıf her bir sürahideki mevcut su miktarını temsil eder. geçersiz kılıyoruzeşittirVekarma kodubu durumları aşağıdaki gibi veri yapılarında kullanabilme yöntemleriKarma Kümesi.

Daha sonra ana çözücü sınıfını uygulayacağız.

java.util.*'i içe aktarın; genel sınıf WaterJugSolver { özel int kapasite1; özel dahili kapasite2; özel int hedefi; public WaterJugSolver(int kapasite1, int kapasite2, int hedef) { this.capacity1 = kapasite1; this.kapasite2 = kapasite2; this.hedef = hedef; } public List<JugState> solvent() { Queue<List<JugState>> kuyruk = new LinkedList<>(); Set<JugState> ziyaret edildi = new HashSet<>(); JugState başlangıç ​​Durumu = new JugState(0, 0); List<JugState> başlangıçPath = new ArrayList<>(); başlangıçPath.add(initialState); kuyruk.add(initialPath); ziyaret edildi.add(initialState); while (!queue.isEmpty()) { List<JugState> currentPath = kuyruk.poll(); JugState currentState = currentPath.get(currentPath.size() - 1); if (currentState.jug1 == hedef || currentState.jug2 == hedef) { return currentPath; } List<JugState> nextStates = getNextStates(currentState); for (JugState nextState : nextStates) { if (!visited.contains(nextState)) { List<JugState> newPath = new ArrayList<>(currentPath); newPath.add(nextState); kuyruk.add(yeniYol); ziyaret edildi.add(nextState); } } } dönüş null; } özel Liste<JugState> getNextStates(JugState currentState) { List<JugState> nextStates = new ArrayList<>(); // Sürahi 1'i doldur nextStates.add(new JugState(capacity1, currentState.jug2)); // Sürahi 2'yi doldur nextStates.add(new JugState(currentState.jug1, kapasite2)); // Sürahi 1'i boşaltın nextStates.add(new JugState(0, currentState.jug2)); // Sürahi 2'yi boşaltın nextStates.add(new JugState(currentState.jug1, 0)); // Sürahi 1'den sürahi 2'ye dökün int pourAmount = Math.min(currentState.jug1, kapasite2 - currentState.jug2); nextStates.add(new JugState(currentState.jug1 - pourAmount, currentState.jug2 + pourAmount)); // Sürahi 2'den sürahi 1'e dökün pourAmount = Math.min(currentState.jug2, kapasite1 - currentState.jug1); nextStates.add(new JugState(currentState.jug1 + pourAmount, currentState.jug2 - pourAmount)); sonrakiDurumları döndür; } public static void main(String[] args) { WaterJugSolver çözücü = new WaterJugSolver(3, 5, 4); Liste<JugState> çözümü = solvent.solve(); if (çözüm != null) { for (JugState durumu : çözüm) { System.out.println(state); } } else { System.out.println("Çözüm bulunamadı."); } } }

içindeSu Sürahisi Çözücüsınıfta, çözümü bulmak için genişlik öncelikli arama (BFS) algoritmasını kullanırız.çözmekyöntem, yolları depolamak için bir kuyruk ve ziyaret edilen durumları takip etmek için bir küme başlatır. Her iki sürahinin de başlangıç ​​durumunun boş olmasıyla başlıyoruz.

getNextStatesYöntem, daha önce bahsedilen altı işlemi gerçekleştirerek mevcut durumdan tüm olası sonraki durumları üretir.

Gerçek Dünya Uygulamaları ve Su Sürahilerimiz

Su testisi problemi basit bir bulmaca gibi görünebilir ancak kaynak yönetimi ve optimizasyon gibi alanlarda uygulamaları vardır. Su sürahileri işimiz bağlamında bu algoritmaları anlamak, büyük ölçekli su kaplarının verimli bir şekilde doldurulması gibi senaryolarda yardımcı olabilir.

Farklı ihtiyaçları karşılamak için geniş bir su sürahisi yelpazesi sunuyoruz. Açık hava etkinlikleri için,Büyük Kapasiteli Paslanmaz Çelik Dış Mekan Su Sürahisiharika bir seçimdir. Önemli miktarda su tutabilir ve uzun yürüyüşler veya kamp gezileri sırasında susuz kalmamanızı sağlar.

Daha taşınabilir bir seçeneğe ihtiyacınız varsa,Paslanmaz Çelik 64oz Taşınabilir Sürahimükemmel. İster spor salonuna gidiyor olun ister ayak işlerine koşuyor olun, yanınızda taşıması kolaydır.

Daha fazla su depolamaya ihtiyaç duyanlar içinPaslanmaz Çelik 64oz 128oz Galon Su Şişesiihtiyacınız olan kapasiteyi sağlar.

Stainless Steel 64oz Portable Jug priceStainless Steel 64oz Portable Jug factory

Çözüm

Java'da su sürahisi problem çözücü uygulamak, BFS gibi algoritmaları ve bunların gerçek dünya sorunlarına nasıl uygulanabileceğini anlamanın harika bir yoludur. Su sürahileri tedarikçisi olarak, su depolama ihtiyaçlarınızı karşılayan yüksek kaliteli ürünler sağlamaya kararlıyız.

Su sürahilerimizi satın almakla ilgileniyorsanız veya ürünlerimiz hakkında sorularınız varsa, bir satın alma görüşmesi için iletişime geçmenizi öneririz. İhtiyaçlarınız için mükemmel su sürahisi çözümünü bulmanıza yardımcı olmak için buradayız.

Referanslar

  • Algoritmalara Giriş Yazan: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
  • Java'da Veri Yapıları ve Algoritmalar, Robert Lafore
Soruşturma göndermek
Bize Ulaşınherhangi bir sorunuz varsa

Bizimle telefon, e-posta veya aşağıdaki çevrimiçi form aracılığıyla iletişime geçebilirsiniz. Uzmanımız kısa sürede sizinle iletişime geçecektir.

Şimdi iletişime geçin!