Я работаю над Java-кодом на основе генетических алгоритмов.Я хочу решить проблему N-королевы и должен вычислить конфликты / столкновения по диагонали.Я не могу правильно найти столкновения в диагонали.
Я нашел алгоритм, но не могу понять, как он реализован в моем коде.Я генерирую 2d массив 8x8
char Queens[][]={
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
};
Я уже нашел столкновения для столбцов и строк.Просто нужно вычислить диагональные столкновения.
for(int i=0;i<8;i++){
Queens[myarr[i]][i] = 'q';
}
int conflict=0;
for (int i=0;i<8;i++){
for (int j=0;j<8;j++){
if(Queens[i][j]=='q'){
for(int left=j-1;left>=0;left--){
// System.out.print(left+" "+j);
if(Queens[i][left]=='q'){
conflict++;
}
}
for(int right=j+1;right<8;right++)
{
if(Queens[i][right]=='q'){
conflict++;
}
}
Это алгоритм, который я нашел, но не смог реализовать его на моем Queens[][]
массиве
# calculate diagonal clashes
for i in range(len(chromosome)):
for j in range(len(chromosome)):
if ( i != j):
dx = abs(i-j)
dy = abs(chromosome[i] - chromosome[j])
if(dx == dy):
clashes += 1
return 28 - clashes