0

2D整数配列から1D整数配列を推測できるJavaコードを書き込もうとしています。私の2D配列は次のようになります。

Node1  Node2   Path
 6      8      501
 2      6      500 
 8      10     505 
 2      4      502

そして、私の仕事は次のとおりです。最初の列の要素(ノード1)から2番目の列の要素(ノード2)への「パス」を見つけたいと思います。私はこれらのようなものを意味します:

「2」から「8」へのパス500 501はこの順序になります。そして、「2」から「4」へのパスは次のようになります502500「6」で終了するためではありません)

私は単純なforループで反復することによってこれを達成しようとしてきましたが、苦労してきました。誰かが私にこれを解決する方法を教えてもらえますか?

私が達成しようとしているコードスニペットは次のとおりです。

            PathSequence:
            for(int i = 0; i < PathGraphRow; i++){
                if(PathGraph[i][0] == source){
                    if(i==0)
                    {
                        nextNode = PathGraph[i][1];
                        resultantPaths[counter] = PathGraph[i][2];
                        prev = lightPathGraph[i][2];
                        if(nextNode == dest){
                            break PathSequence;
                        }
                        counter++;
                    }else if(i > 0 && prev != PathGraph[i][2])
                    {
                        nextNode = PathGraph[i][1];
                        resultantPaths[counter] = PathGraph[i][2];
                        prev = PathGraph[i][2];
                        if(nextNode == dest){
                            break PathSequence;
                        }
                        counter++;
                    }
                }

                if(nextNode == PathGraph[i][0] && prev != PathGraph[i][2]){
                    nextNode = PathGraph[i][1];
                    resultantPaths[counter] = PathGraph[i][2];
                    prev = PathGraph[i][2];
                    if(nextNode == dest){
                        break PathSequence;
                    }
                    counter++;                    
                }

                if(i == PathGraphRow-1 && PathGraph[i][2] != resultantPaths[counter]){
                    if(PathGraph[i][1] != dest){
                        resultantPaths = new int[PathCount];
                    }
                }

            }        
    }

ありがとうございました。

よろしく

4

1 に答える 1

0

私がいくつかの詳細を見落としているのでない限り、問題はサブパスなしではかなり些細なことです。非常に具体的な単一のforループが必要です。

 for (int i = 0; i < columns; i++)
 {
      Path path = new Path(array[i][0], array[i][1], array[i][2]);
      pathsArray.Add(path);
 }

それはもちろん擬似コードですが、基本的にはそれが私のやり方です。各パスを3タプルにします。データをどのように格納するのかまだよくわかりません。すべての値を1Dint配列に入れると、パスの開始位置と終了位置をどのように知ることができますか?すべてのパスが開始、終了、および結果によって定義され、1D配列で機能すると仮定しますが、2D配列よりも使用する方が悪いでしょう。パスの長さが任意の場合、データを1D配列に格納する方法はありません。とにかく、ここに提供されたテーブルを1D配列に配置するコードがあります(これ以上複雑ではないと仮定します)。

int[] paths = new int[2dArray.length * 3];
int mapper = 0;

for (int i = 0; i < 2dArray.length; i++)
{
     paths[mapper] = 2dArray[i][0];
     paths[mapper + 1] = 2dArray[i][1];
     paths[mapper + 2] = 2dArray[i][2];
     mapper += 3;
}

次に、配列にアクセスするには、取得している値を知るためにmod3がらくたを実行する必要があります...

 if (index % 3 == 0)
    //path start
 else if (index % 3 == 1)
    //path end
 else if (index % 3 == 2)
    // result of path 
于 2012-12-11T21:36:18.117 に答える