Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 弗洛伊德';s算法(最短路径)问题-C++;_C++_Algorithm_Floyd Warshall - Fatal编程技术网

C++ 弗洛伊德';s算法(最短路径)问题-C++;

C++ 弗洛伊德';s算法(最短路径)问题-C++;,c++,algorithm,floyd-warshall,C++,Algorithm,Floyd Warshall,基本上,我的任务是实现Floyd的算法来寻找矩阵的最短路径。在我的例子中,取一个值arg,矩阵变为size arg*arg。下一个值字符串将按收到的顺序应用于矩阵。最后,a-1表示无穷大 老实说,我不知道我的问题出在哪里。当运行测试时,第一对通过,但其余失败。我将只公布前两次失败以及通行证。我将发布相关的代码段 int arg, var, i, j; cin >> arg; int arr[arg][arg]; for (i = 0; i < arg; i++) {

基本上,我的任务是实现Floyd的算法来寻找矩阵的最短路径。在我的例子中,取一个值arg,矩阵变为size arg*arg。下一个值字符串将按收到的顺序应用于矩阵。最后,a-1表示无穷大

老实说,我不知道我的问题出在哪里。当运行测试时,第一对通过,但其余失败。我将只公布前两次失败以及通行证。我将发布相关的代码段

int arg, var, i, j;

cin >> arg;

int arr[arg][arg];

for (i = 0; i < arg; i++)
{
    for(j = 0; j < arg; j++)
    {
        cin >> var;
        arr[i][j] = var;
    }
}


for(int pivot = 0; pivot < arg; pivot++)
{
    for(i = 0; i < arg; i++)
    {
        for(j = 0; j < arg; j++)
        {
            if((arr[i][j] > (arr[i][pivot] + arr[pivot][j])) && ((arr[i][pivot] != -1) && arr[pivot][j] != -1))
            {
                arr[i][j] = (arr[i][pivot] + arr[pivot][j]);
                arr[j][i] = (arr[i][pivot] + arr[pivot][j]);
            }
        }
    }
}

想象一下这种情况,
arr[i][j]=-1
,显然
(arr[i][j]>(arr[i][pivot]+arr[pivot][j])和(((arr[i][pivot]!=-1)和&arr[pivot][j]!=-1
失败了,但如果
arr[i][pivot]
arr[pivot][j]
没有失败,就不应该失败


因为你使用的是
-1
而不是无穷大,你必须有
if((arr[i][j]=-1|arr[i][j]>(arr[i][pivot]+arr[pivot][j])&((arr[i][pivot]!=-1)和&arr[pivot][j]!=-1)之类的东西,也就是说,你要检查两件事:第一件是你的状况,第二件是当
arr[i][j]时的情况
为无穷大,并且通过
枢轴的路径存在,因为在本例中,任何有效路径都小于无穷大。

Wow!非常感谢你!我想我遇到的问题是,我认为它是无穷大,而程序只是看到一个负1。这么愚蠢的问题!Haha@Shoggoth269最好准确地掌握算法要求的内容,否则请确保处理所有特殊情况。
floyd> 
 * * * Program successfully started and correct prompt received. 

floyd 2 0 14 14 0
0 14 14 0 
floyd>   PASS  : Input "floyd 2 0 14 14 0" produced output "0 14 14 0".  

floyd 3 0 85 85 85 0 26 85 26 0
0 85 85 85 0 26 85 26 0 
floyd>   PASS  : Input "floyd 3 0 85 85 85 0 26 85 26 0" produced output "0 85 85 85 0 26 85 26 0".  

floyd 3 0 34 7 34 0 -1 7 -1 0
0 34 7 34 0 -1 7 -1 0 
floyd>   FAIL  : Input "floyd 3 0 34 7 34 0 -1 7 -1 0" did not produce output "0 34 7 34 0 41 7 41 0".  

floyd 4 0 -1 27 98 -1 0 41 74 27 41 0 41 98 74 41 0
0 -1 27 68 -1 0 41 74 27 41 0 41 68 74 41 0 
floyd>   FAIL  : Input "floyd 4 0 -1 27 98 -1 0 41 74 27 41 0 41 98 74 41 0" did not produce output "0 68 27 68 68 0 41 74 27 41 0 41 68 74 41 0".