Обход шахматной доски

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

slaerok
Сообщения: 14
Зарегистрирован: 11 июл 2008, 22:26

я беру доску 4 на 4, смещаюсь по доске из левого верхнего угла по оси х на 1 и по оси у на 3, т.е. фишка находится теперь на 2й позиции последней строки:

//проверка выхода за границы доски
if (x<0) or (y<0) or (x>4) or (y >4) then
n:=true;
...................
//проверка прихода фишки в конечные координаты
if (x=2)and(y=0)and o and (n<> true) then
k:=k+1;

И считаю количество всевозможных вариантов достижения фишкой из текущей позиции правого нижнего угла. Ходов должно быть 2, но на прога находит 3 :) .

Реальная задача: хочу применить эту процедуру, для реализации игры "уголки".
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

Довольно таки интересная задача, завтра стучись в аську 498179681 чем смогу тем помогу :)
slaerok
Сообщения: 14
Зарегистрирован: 11 июл 2008, 22:26

хорошо, спасибо большое
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

насчет того что находит 3
алгоритм правильный а в реализацию вкрался человеческий фактор,
в итоге в программе в архиве две ошибки и одна непонятность.
ошибка в инициализации - выделенную строчку надо удалить

Код: Выделить всё

// инициализация таблицы состояний
s[1,1]:=-1;
s[1,2]:=-1;
s[1,3]:=-1;
s[1,4]:= 0;
s[1,5]:= 0;
s[1,6]:= 1;
s[1,7]:= 1;
[b]s[1,1]:= 1;[/b]
s[1,8]:= 1;
s[2,1]:=-1;
s[2,2]:= 0;
s[2,3]:= 1;
s[2,4]:=-1;
s[2,5]:= 1;
s[2,6]:=-1;
s[2,7]:= 0;
s[2,8]:= 1;
непонятность в том что при отсчете я почемуто взял систему координат с 0 а не с 1 как в пояснении

Код: Выделить всё

//сброс накопителей координат [b]в накопители заносятся координаты начального положения фишки тоесть должнобыть
//х=1,у=1,при изменении начальных кооррдинат фишки их надо записывать именно тут[/b]
x := 0;
y := 0;
//скомбинированные в цикле проверки
for i:=1 to 10 do
        begin
        //вычисление текущих координат фишки
        x:=x+v[1,i];
        y:=y+v[2,i];
        //проверка выхода за границы доски [b]при отсчете с нулевых координат должно быть"if (x<0) or (y<0) or (x>4) or (y >4) then"[/b]
        if (x<0) or (y<0) or (x>5) or (y >5) then
        n:=true;
        //проверка отличия от предыдущего набора ходов
        if (v[1,i]<>p[1,i])or(v[2,i]<>p[2,i]) then
        o:=true
        else
        o:=false;
        //проверка прихода фишки в конечные координаты [b]так как были взяты начальные координаты фишки 0,0
//то код ниже работает правильно если же брать начальные координаты фишки 1,1  должно быть 
// "if (x=5)and(y=5)and o and (n<> true) then " тоесть конечные координаты фишки надо вводить сюда[/b]
        if (x=4)and(y=4)and o and (n<> true) then
        k[i]:=k[i]+1;
        end;
Ответить