c中的2D到1D数组

时间:2013-02-06 01:59:47

标签: arrays 2d

我正在研究遗传算法和C编程语言。我的任务是读取表示连通图的矩阵,然后根据节点之间的距离计算适应度,教授已经明确表示这不必是精确的,也不一定遵循图上的约束。所以我的想法是将矩阵读入一个有效的二维数组中。我现在需要将2D阵列放入我们称之为机架的一维阵列中,然后我们将机架混杂并将其分成两个相等长度的较小阵列。

矩阵为20 * 20,因此机架尺寸必须为400.

无论如何,这是我执行此操作的代码,尽管它不起作用。

void TwoDtoOneD(int array[][SIZE], int left[SIZE*SIZE]){
    int i,j;
    for(i=0;i<SIZE*SIZE;i++){
        for(j=0;j<SIZE*SIZE;j++){
            left[i] = array[i][j];
        }//end for
    }//end for
}

2 个答案:

答案 0 :(得分:0)

left[j+i*SIZE] = array[i][j]

了解左边每个条目如何填充循环的逻辑,然后担心根据需要放置数组数据。

答案 1 :(得分:0)

通过做两个fors并使它们迭代直到SIZE ^ 2,你使array[i]迭代太多了。 i应该只到20(或SIZE),这是矩阵的ij的最大值。 为了使其工作,每次将值更改为向量时,您将需要第三个变量递增(左),此变量与for循环变量启动无关。

因此,对于您的示例,它将是这样的:

void TwoDtoOneD(int array[SIZE][SIZE], int left[SIZE*SIZE]){  /
  int i,j,k;
  k=0;
  for(i=0;i<SIZE;i++){
     for(j=0;j<SIZE;j++){
        left[k] = array[i][j];
        k++;
     }//end for
  }//end for
}

现在,您的left[]数组中包含k+1个元素,您可以迭代它直到k

完成后,由于您正在使用图表,请尝试阅读有关图形路径算法的一些内容(Dijkstra'sPrim'sFloyd'sJohnson's。 。),你会发现,对于你所有图形问题(或大多数问题)来说,这是一个非常精心设计的解决方案。

希望这会有所帮助。祝你好运!