其他分享
首页 > 其他分享> > c – 具有索引2D数组的逗号运算符

c – 具有索引2D数组的逗号运算符

作者:互联网

我有这个算法,它是用于图论的dijkstra算法的伪代码.第一件事就是基本的for循环.

visitedSet[0] = true //visitedSet is a array of bools
for (int i = 1; i <= numberNodes; ++i)
{
    distanceArray[i] = adjacencyMatrix[0,i];
    //distanceArray is 1D with size of fifty
    //adjacencyMatrix is 2D with size of fifty
    //Both arrays hold values of unsigned ints
}

这是数组定义

enum GraphLimit300 {MAX_NODES = 50};
unsigned int adjacencyMatrix[MAX_NODES][MAX_NODES];
unsigned int distanceArray[MAX_NODES];

Visual Studio给我一个数组说我无法将一个无符号整数数组赋给指针.我在网上查了一下,使用逗号运算符基本上在这种情况下抛出第一个case 0,并将其视为distanceArray [i] = adjacencyMatrix [i];这对我来说没有意义,因为adjacenyMatrix是一个2D阵列.我只是想知道是什么给了我这个编译错误并获得更多关于原因的信息,因为我基本上只是复制伪代码基本上所说的变量名.

伪代码:

    S = { 1 }
for ( index = 2; index <= N; ++ index )
    D[ index ] = C[ 1, index ]
for ( index = 1; index <= N – 1; ++ index )
    Choose a vertex v in V – S such that D[ v ] is a minimum
    Add v to S
    for each vertex w in V – S do
        D[ w ] = min( D[ w ], D[ v ] + C[ v, w ] )

上面的伪代码使用列表来表示它们的数组,它们由于某种原因从1开始,所以我将它修改为在我的代码中从0开始.

解决方法:

您必须查看如何访问2D阵列的元素.另外,看看comma operator的作用.你必须使用[]两次:

adjacencyMatrix[0][i]

下列:

adjacencyMatrix[0, i]

相当于:

adjacencyMatrix[i]

哪个仍然会留下一维数组.并且,正如错误消息所示:

   distanceArray[i] = adjacencyMatrix[i];
// ^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^
//   unsigned int   array of unsigned ints

你不可能期望这个任务发生.

标签:c,arrays,comma-operator,graph-theory
来源: https://codeday.me/bug/20191003/1850109.html