我想知道如何用遗传算法来解决N个皇后。
程序运行和编译正常,但没有产生我想要的结果。我想显示每个皇后的x,y坐标,然后简单地打印出来。然而,相反,我在输出端得到了随机的垃圾,我不知道为什么。
电流输出示例:
(0,0) (1,3248234234) (2,0) (3,-3248236736) (4,57435727) (5,234743567) (6, 23498348) (7,23487234)
期望输出示例(N皇后问题的解决方案):
(3,4) (7,2) (0,3) (4,6) (6,5) (1,7) (5,1) (2,0)
最佳答案
不确定这是否是您特定问题的原因,但这是一个问题:
for(i=0;i<POP;i++) for(int j=0;j<SIZE;j++) population[i][j] = getRand(SIZE);
while(done == 0){
for(i=0;i<POP;i++){
if(getWeight(children[i]) == 28){
printf("solution: ");
printArray(children[i]);
done = 1;
}
}
以上是人口的初始化和循环的开始。第一次通过时,子数组包含未初始化的数据。
考虑到算法的其余部分,您需要检查
population
元素的权重(并从population
打印元素),如果它是赢家,而不是children
。关于c - C-N个皇后区的遗传算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43114194/