Теперь необходимо найти ещё два «квадрата» ферзей при условии, два исходных ферзя находятся на одной из сторон «квадрата».
Имеем тот же ФМР1: 11, 6,1,9,4,12,7,3,10,5,13,8,3
Необходимо построить два «квадрата» ферзей для 2-го и 7-го ферзей, которые буду находиться на одной стороне этого «квадрата».
Напишем код определения этих двух «квадратов» ферзей:
function main {
var N=13;
// определяем массив ФМР1
var F = new Array(N+1);
var shag=5;
MODrech(N, F, shag);
var ax=2;
var bx=7;
var ay=F[ax];
var by=F[bx];
KVADRAT1(N, ax, ay, bx, by, cx, cy, dx, dy);
// печать cx, cy, dx, dy
KVADRAT1(N, bx, by, ax, ay, cx, cy, dx, dy);
// печать cx, cy, dx, dy
}
function KVADRAT1(N, ax, ay, bx, by, cx, cy, dx, dy) {
var delx=bx-ax;
var dely=by-ay;
cx=bx+delx;
cy=by-delx;
dx=ax+dely;
dy=ay-delx;
if (dy > N) dy=dy-N;
if (dy < 1) dy=dy+N;
if (cy > N) cy=cy-N;
if (cy < 1) cy=cy+N;
if (dx > N) dx=dx-N;
if (dx < 1) dx=dx+N;
if (cx > N) cx=cx-N;
if (cx < 1) cx=cx+N;
}
Получаем в первом случае ферзи 8 и 3, а во втором случае - ферзи 1 и 6.
В отличии от первого «квадрата» ферзей у второго и третьего «квадратов» определяемые ферзи всегда существуют в массиве F.