我正在研究遗传算法和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
}
答案 0 :(得分:0)
left[j+i*SIZE] = array[i][j]
了解左边每个条目如何填充循环的逻辑,然后担心根据需要放置数组数据。
答案 1 :(得分:0)
通过做两个fors并使它们迭代直到SIZE ^ 2,你使array[i]
迭代太多了。
i
应该只到20(或SIZE),这是矩阵的i
和j
的最大值。
为了使其工作,每次将值更改为向量时,您将需要第三个变量递增(左),此变量与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's,Prim's,Floyd's,Johnson's。 。),你会发现,对于你所有图形问题(或大多数问题)来说,这是一个非常精心设计的解决方案。
希望这会有所帮助。祝你好运!