0

Floyd-warshallアルゴリズムを使用して、重み付き無向グラフの任意の2つの頂点間の最大距離を求めたい。このため私はいくつかの変更を加えました:無指向性グラフの最長距離用Floyd-warshall

  1. 私はポジティブではなくマイナスの重みを付け加えます。

  2. 次に、私は最短経路を見つけます。

しかし、正しい出力は得られません。誰かが私が作っている間違いを指摘できますか?

class TestClass { 
    public static void main(String args[]) throws Exception { 
     Scanner sc = new Scanner(System.in); 
     int testcases=sc.nextInt(); 
     for(int t=0;t<testcases;t++) 
     { 
      int nodes=sc.nextInt(); 
      int edges=sc.nextInt(); 
      int[][] dist_mat=new int[nodes][nodes]; 
      for(int i=0;i<nodes;i++) 
      { 
       for(int j=0;j<nodes;j++) 
       { 
        if(i!=j) 
        { 
         dist_mat[i][j]=Integer.MAX_VALUE; 
        } 
       } 
      } 
      for(int i=0;i<edges;i++) 
      { 
       int source=sc.nextInt(); 
       int dest=sc.nextInt(); 
       dist_mat[source-1][dest-1]=-sc.nextInt(); 
       dist_mat[dest-1][source-1]=dist_mat[source-1][dest-1]; 
      } 

      for(int k=0;k<nodes;k++) 
      { 
       for(int i=0;i<nodes;i++) 
       { 
        for(int j=0;j<nodes;j++) 
        { 

         if(i!=j && j!=k && i!=k && dist_mat[i][j]>dist_mat[i][k]+dist_mat[k][j]) 
         { 
          if(dist_mat[i][k]<Integer.MAX_VALUE && dist_mat[k][j]<Integer.MAX_VALUE) 
            dist_mat[i][j]=Integer.min(dist_mat[i][j],dist_mat[i][k]+dist_mat[k][j]); 
          if(dist_mat[j][k]<Integer.MAX_VALUE && dist_mat[k][i]<Integer.MAX_VALUE) 
            dist_mat[j][i]=Integer.min(dist_mat[j][i],dist_mat[j][k]+dist_mat[k][i]); 
         } 

        } 
       } 
      } 
     } 
    } 

同じ入力である: -

1 [テストケースの数]

5 4 [ノードの数、辺の数]

1 2 4 [最初のノード、第2のノード、重量]

3 2 3 [最初のノード、第2ノード、重量]

2 5 2 [第一任意の2つのノード間の最長経路を見つけることができるであろうノード、第2ノード、重量]

4 1 [第一のノード、第2ノード、重量]

+0

Floyd-Warshallアルゴリズムは、加重グラフで**最短**パス(「最長距離」ではない)を見つけるアルゴリズムです。ここで何をしようとしていますか? – avysk

+1

FWを使って最大距離を計算することはできません。実際、ループの場合、最大の距離は無限であってもよい。 – hivert

答えて

0

アルゴリズムはHamiltonian path問題を決定するために使用することができます。しかし、ハミルトニアン経路の問題はNP-completeです。 Floyd-Warshallアルゴリズムは多項式ランタイム境界を生成します。したがって、変更によって最長パスを決定するアルゴリズムが生成されることはありません。

+0

グラフには負のサイクルは含まれません。 私が作ろうとしていたポイントは、正の値の場合に負の重みを使用することはできません(すべてのエッジの重みが正であることを前提とします)。次に、最短のパスを見つけて、 。 誰かが理由を説明できない場合は、上記の例とテストケースが機能するはずです。 – ddwivedy

関連する問題