Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Задача «Хід коня»

ЗавданняДопомога в написанніДізнатися вартістьмоєї роботи

Зовсім не обов’язково бути шахматистом, щоб знати, яка шахматна фігура найдивовижніша. Звісно, це кінь! Не випадково вислів «хід конем» став крилатим. А один із відомих гросмейстерів, С. Тартаковер, вважав, що «вся шахматна партія — це один замаскований хід конем». Міністерство освіти і науки України Полтавський державний педагогічний університет. Repeat вибір наступного можливого ходу зі списку… Читати ще >

Задача «Хід коня» (реферат, курсова, диплом, контрольна)

Міністерство освіти і науки України Полтавський державний педагогічний університет

імені В. Г. Короленка Задача

Хід коня

Підготували студенти групи Ф-52

Татушенко М.В., Прудка І.І., Кириченко І.О.

Полтава — 2009

План

  • Вступ
  • Умова задачі
  • Блок-схема задачі «Хід коня»
  • Підпрограма
  • Лістинг програми

Вступ

Зовсім не обов’язково бути шахматистом, щоб знати, яка шахматна фігура найдивовижніша. Звісно, це кінь! Не випадково вислів «хід конем» став крилатим. А один із відомих гросмейстерів, С. Тартаковер, вважав, що «вся шахматна партія — це один замаскований хід конем» .

Задача про хід коня відома ще з XVIII століття. Леонард Ейлер присвятив їй велику працю «Розв'язання одного цікавого питання, яке, здається, не підкоряється ніякому дослідженню» (26.04.1757). В листі до Гольдбаха він писав: «Спогади про запропоновану колись мені задачу послугували для мене недавно приводом до деяких витонченостей, в яких звичайний аналіз здавалося б немає ніякого застосування… Я знайшов нарешті ясний спосіб знаходити безліч розв’язків (хоча їх кількість небезкінечна), не роблячи спроб» .

Умова задачі

Задача про хід коня відома ще з XVIII століття. Леонард Ейлер присвятив їй велику працю «Розв'язання одного цікавого питання, яке, здається, не підкоряється ніякому дослідженню» (26.04.1757). В листі до Гольдбаха він писав: «Спогади про запропоновану колись мені задачу послугували для мене недавно приводом до деяких витонченостей, в яких звичайний аналіз здавалося б немає ніякого застосування… Я знайшов нарешті ясний спосіб знаходити безліч розв’язків (хоча їх кількість небезкінечна), не роблячи спроб» .

Тож розглянемо задачу про хід коня.

Здійснимо постановку задачі. Дано дошку n*n, яка містить n2 полів. Коня, який ходить згідно шахових правил, поміщують на поле з початковими координатами х0 та у0. Потрібно покрити всю дошку ходами коня, тобто обчислити обхід дошки, якщо він існує, з n2-1 ходів, такий, щоб кожне поле відвідується єдиний раз. Очевидно, задачу покриття n2 полів можна звести до більш простої: або виконати черговий хід, або встановити, що ніякий хід далі неможливий. Перша спроба виглядатиме так:

Procedure спроба наступного кроку;

Begin ініціація вибірки ходів;

Repeat вибір наступного можливого ходу зі списку чергових ходів;

If він прийнятний then

Begin запис ходу;

If дошка незаповнена then

Begin спроба наступного кроку;

If невдачаthen стирання попереднього кроку

End

End

Until (хід був удалим) && (немає інших можливих ходів)

End.

Блок-схема задачі «Хід коня»

хід коня лістинг алгоритм

Підпрограма

Лістинг програми

Program tyr_konia;

Uses crt'

Const

dx: array [1.8] of integer= (2,1,-1,-2,-2,-1,1,2);

dy; array [1.8] of integer= (1,2,2,1,-1,-2,-2,-1);

var

i, j, n, Nsqr: integer;

q: boolean;

h: array [1.8,1.8] of integer;

procedure Try (i, x, y: integer; var q: boolean);

var k, u, v: integer;

q1: boolean;

begin

k: =0;

repeat

k: =k+1;

q1: =false;

u: =x+dx [k];

v: =y+dy [k];

if (l<=u) and (u<=n) and (l<=v) and (v<=n) and (h [u, v] =0) then

begin

h [u, v]: =i-1;

if i

begin

Try (i+1,u, v, q1);

If not q1 then h [u, v]: =0;

End

Else q1: =true;

End;

Until q1 or (k=8);

q: =q1;

end;

begin

clrscr;

for i: =1 to 8 do

for j: =1 to 8 do

h [i, j]: =0;

write (`n='); readln (n);

write (`i='); readln (i);

write (`j='); readln (j);

Nsqr: =n*n;

h [i, j]: =1;

Try (2, i, j, q);

Writeln (`Po4atkove polo*ennnia kon9: [', i,'; ', j,'] ');

If q then

Begin

h [i, j]: =0;

for i: =1 to n do

begin

for j: =1 to n do write (h [i, j]: 3);

writeln;

end;

end

else

writeln (`path not found');

readln;

end.

Показати весь текст
Заповнити форму поточною роботою