0

だから私は問題のすべての解決策を見つけるアルゴリズムを書いています。より良い解決策を見つけるたびに、Solutions オブジェクトの解決策で現在のリストを上書きし、等しい解決策を見つけるたびに、それを自分のソリューションのリスト。

問題は、出力で同じ解決策が 6 回得られることです。これは、元の解決策を追加するのではなく、参照をコピーしているためだと思います。

私の問題(JavaのArrayListの問題)のように見える投稿を見つけましたが、そこで何をしようとしましたが、問題は解決しません。

というわけで、いろいろ試しましたが、これが一番いいです。これは、Solutions オブジェクトに現在含まれているソリューションと共に、現在のソリューションをリストに追加するために呼び出すメソッドです。それは少し長く、私はいくつかの不必要なことをしています.私はただ私の問題を解決しようとしています.

ArrayList<Integer> horstreets;
ArrayList<Integer> verstreets;

public ArrayList<StreetPlan> addCurrentPlan(Solutions sol) {
    ArrayList<StreetPlan> plan = new ArrayList<>();

    ArrayList<Integer> h = null;
    ArrayList<Integer> v = null;
    //copy all the previous answers
    for (StreetPlan a : sol.getStreetPlans()) {
        h= new ArrayList<>();
        for (Integer b : a.getHorizontalStreets()) {
            Integer c=b.intValue();
            h.add(c);
        }
        v =  new ArrayList<>();
        for (Integer b : a.getVerticalStreets()) {
            Integer c=b.intValue();
            v.add(c);
        }
        plan.add(new MyStreetPlan(h, v));
    }

    //add new solution
    h= new ArrayList<>();
    v= new ArrayList<>();
    for (Integer b : horstreets) {
        int c= b.intValue();
        h.add(c);
    }
    for (Integer b : verstreets) {
        int c= b.intValue();
        v.add(c);
    }

    plan.add(new MyStreetPlan(h, v));
    return plan;
}

これは、新しい StreetPlan を作成し、現在の (したがってより優れた) ソリューションのみを追加するために私が呼​​び出すメソッドです。

public ArrayList<StreetPlan> setBetterPlan() {
    ArrayList<StreetPlan> plan = new ArrayList<>();

    ArrayList<Integer> h = null;
    ArrayList<Integer> v = null;

    h= new ArrayList<>();
    v= new ArrayList<>();
    for (Integer b : horstreets) {
        int c= b.intValue();
        h.add(c);
    }
    for (Integer b : verstreets) {
        int c= b.intValue();
        v.add(c);
    }

    plan.add(new MyStreetPlan(h, v));
    return plan;
}

投稿が少し長くなって申し訳ありませんが、明確にしたいだけです。そして、私の英語でごめんなさい:p

編集 私はこの方法が非常に多くのコードであることを知っていますが、私がこのようにすると

    ArrayList<StreetPlan> plan = new ArrayList<>();
    plan.add(new MyStreetPlan(horstreets,verstreets));
    sol = new MySolutions(Bcost, Hstreets, plan);

より良いソリューションを追加するには、これを同等の計画に追加します。

    ArrayList<StreetPlan> plan = new ArrayList<>();
    plan.add(new MyStreetPlan(horstreets,verstreets));
    plan.addAll(sol.getStreetPlans());
    sol = new MySolutions(Bcost, Hstreets, plan);

私の出力はいくつかの白い線です(私のアルゴリズムの最後にhorstreetsverstreets2つの空のリストがあるため)

4

0 に答える 0