Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Path 从int*到int c+的转换无效+;_Path_Shortest - Fatal编程技术网

Path 从int*到int c+的转换无效+;

Path 从int*到int c+的转换无效+;,path,shortest,Path,Shortest,我一直在学习一个教程,试图了解Dijkstra的最短路径算法。最初是java,但我尽最大努力把它转换成C++,但不幸的是,我遇到了一个我无法解决的问题。 这是我的密码 错误发生在队列中 ---距离数组[0]=测试数组[0] #include <iostream> using namespace std; int main(){ int Testarray[5][5] = {{}}; //stores first row of test array //u

我一直在学习一个教程,试图了解Dijkstra的最短路径算法。最初是java,但我尽最大努力把它转换成C++,但不幸的是,我遇到了一个我无法解决的问题。 这是我的密码

错误发生在队列中

---距离数组[0]=测试数组[0]

#include <iostream>

using namespace std;

int main(){

    int Testarray[5][5] = {{}};
    //stores first row of test array
    //updates when visiting nodes
    int Distancearray[5] = {};
    //stores visited nodes
    int visitedN[5] = {};
    //stores previous node
    int PreviousN[5] = {};
    //holds the minimum value
    int Min = 999999;
    //holds the next node value
    int NextNode = 0;

    cout << "Enter Numbers:\n" << endl;

    for(int i=0; i < 5; i++){
        //initialize visited array to 0
        visitedN[i] = 0;
        //same
        PreviousN[i] = 0;

        for(int j=0; j < 5; j++){

            cin >> Testarray[i][j];

            if(Testarray[i][j] == 0){
                //sets the largest possible number
                Testarray[i][j] = 999999;
            }
        }
    }

    Distancearray[0] = Testarray[0];
    //Sets source node as checked
    visitedN[0] = 1;
    //Sets distance from sources to 0, starting point
    Distancearray[0] = 0;

    for(int i=0; i<5; i++){
        Min = 9999999;

        for(int j = 0; j<5 ; j++){
            if(Min > Distancearray[j] && visitedN[j] != 1){
                //sets next node to J
                Min = Distancearray[j];
                NextNode = j;
            }
        }

        visitedN[NextNode] = 1;

        for(int i=0; i<5; i++){

            if(visitedN[i] != 1){

                if(Min+Testarray[NextNode][i] <= Distancearray[i]){

                    Distancearray[i] = Min+Testarray[NextNode][i];

                    PreviousN[i] = NextNode;
                }
            }
        }
    }

    for(int i=0; i<5; i++){
        cout << "Lenght" + Distancearray[i] << endl;
    }

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

        cout <<"Path:" + i << endl;

        j=i;

        do{

            j = PreviousN[j];

            cout<<"<---" + j<<endl;

        }
        while(j!=0);

    }

    return 0;
}
#包括
使用名称空间std;
int main(){
int Testarray[5][5]={{};
//存储测试数组的第一行
//访问节点时更新
int距离数组[5]={};
//存储访问的节点
int visitedN[5]={};
//存储上一个节点
int-PreviousN[5]={};
//保持最小值
int Min=999999;
//保存下一个节点值
int NextNode=0;
cout Testarray[i][j];
if(Testarray[i][j]==0){
//设置可能的最大值
Testarray[i][j]=999999;
}
}
}
距离数组[0]=测试数组[0];
//将源节点设置为选中状态
已访问n[0]=1;
//将从源到起点的距离设置为0
距离数组[0]=0;

for(int i=0;iDistancearray是对一维int数组的引用,它相当于C中的int*,Testarray是对二维int数组的引用,也称为int**。Distancearray[0]=Testarray[0]意味着将int数组分配给int,或者换句话说,将int*分配给int。因此,我可以从一开始就将Distancearray简单地更改为二维数组吗?