0

素集合を使用してクラスカルのアルゴリズムの実装を作成しようとしています。ほぼ機能していると思いますが、コードの一部を正しく機能させることができないようです。コードは、グラフ上のノードが、追加しようとしているセットに既に含まれているかどうかを確認する必要があります。それ以外の場合は、追加したくありません。私が使用しているコードは次のとおりです。

public static boolean difSets(int index1, int index2, ArrayList<Node> sets[], Node nodes[])
{
    int setnum1 = 0;
    int setnum2 = 0;
    for(int i = 0; i < nodes.length; i++)
    {
        for(int j = 0; j < sets[i].size(); j++)
        {
            if(nodes[index1].getX() == sets[i].get(j).getX() && nodes[index1].getY() == sets[i].get(j).getY());
                setnum1 = i;
            if(nodes[index2].getX() == sets[i].get(j).getX() && nodes[index2].getY() == sets[i].get(j).getY());
                setnum2 = i;
        }
    }
    if(setnum1 == setnum2)
        return false;
    else
        return true;
}

ちょっとした情報: このメソッドは、2 つのノードが既に同じセットにあるかどうかを判断しています。ノード配列には、グラフ上のすべてのポイントが含まれます (ノードは、x 値と y 値を格納するだけのクラスであり、それらを取得できます。セットは、ノードの ArrayLists の配列です。問題の開始時に、すべてのノードはArrayList 自体; 最終的に、それらはすべて同じ ArrayList にある必要があります. インデックス 1 と 2 は Nodes 配列のノードに対応します.

残念ながら、このコードでは正しい出力が得られないようです。私はそれを1時間以上見つめていましたが、何が問題なのか理解できませんでした.

前もって感謝します。

4

1 に答える 1

0

解決しました。私には意味をなさないJavaの多くのことの1つ。

public static boolean difSets(int index1, int index2, ArrayList<Node> sets[], Node nodes[])
{
    int setnum1 = 0;
    int setnum2 = 0;
    int x1 = nodes[index1].getX();
    int y1 = nodes[index1].getY();
    int x2 = nodes[index2].getX();
    int y2 = nodes[index2].getY();
    for(int i = 0; i < nodes.length; i++)
    {
        for(int j = 0; j < sets[i].size(); j++)
        {
            int x3 = sets[i].get(j).getX();
            int y3 = sets[i].get(j).getY();
            if(x1 == x3 && y1 == y3)
                setnum1 = i;
            if(x2 == x3 && y2 == y3)
                setnum2 = i;
        }
    }
    if(setnum1 == setnum2)
        return false;
    else
        return true;
}

それは事実上、私が以前持っていたものとまったく同じでなければなりません。それにもかかわらず...

于 2013-02-08T09:02:32.700 に答える