我想用floyd-warshall算法找出加权无向图的任意两个顶点之间的最大距离。为此,我做了一些修改:
我加的是负数而不是正数。
然后我找出最短的路径。
但它没有给我正确的输出有人能指出我犯的错误吗?

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[测试用例数]
54[节点数,边数]
1 2 4[第一个节点,第二个节点,权重]
3 2 3[第一节点,第二节点,权重]
2 5 2[第一节点,第二节点,权重]
4 1 1[第一节点,第二节点,权重]

最佳答案

一个能够在任意两个节点之间找到最长路径的算法可以用来决定Hamiltonian path问题。然而,哈密顿路径问题是NP-complete。Floyd Warshall算法产生一个多项式运行时界,因此修改将导致确定最长路径的算法是不重要的。

关于algorithm - 无向图的最长距离的Floyd-warshall,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42500120/

10-11 21:35