Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 8


Совет 1 (общий)

Целесообразно выделить в отдельную процедуру поиск и заполнение клеток, достигаемых за один ход из каждой клетки k-ro уровня. Назовем эту процедуру newlevel и условимся, что, помимо маркировки клеток (k+l)-ro уровня, она сообщает, удалось ли сделать хотя бы один ход.

Программа 4_06.bas

DIM A(8,8)

FOR I=0 ТО 7 : FOR J=0 TO 7

A(I,J)=-l NEXT J: NEXT I

CLS : INPUT "Задайте начальную позицию :",I,J A(I,J)=0 : K=0 M:NEWLEVEL

IF XOD = 1 THEN GOTO M

FOR I=0 TO 7 : FOR J=0 TO 7

PRINT A(I,J) NEXT J: PRINT : NEXT I END

SUB NEWLEVEL XOD=0

FOR I=0 TO 7 : FOR J=0 TO 7

IF A(I,J)=K THEN

TRY(I-2,J-l): TRY(I-2,J+1)

TRY(I-1,J-2): TRY(I-l,J+2)

TRY(I+1,J-2): TRY(I+1,J+2)

TRY(I+2,J-l): TRY(I+2,J+1)

END IF NEXT J: NEXT I

K=K+1

END SUB

SUB TRY(P,Q)

IF P>=0 AND P<8 AND Q>=0 AND Q<8 AND A(P,Q)<0 THEN A(P,Q)=K+1 : XOD=1

END IF

END SUB

Программа 4_06.с

#include <stdio.h>

#include <conio.h>

char newlevel(void);

void try(int p,int q);

char a[8][8],i,j,k=0,xod;

void main(void) {

clrscr();

for(i=0; i<8; i++)

for(j=0; j<8; j++)

a[i][j]=-l;

puts("Задайте начальную позицию :");

scanf("%d %d",&i,&j);

a[i][j]=0; m:newlevel();

if(xod==l) goto m;

for(i=0; i<8; i++) {

for(j=0; j<8; j++)

printf("%3d",a[i] [j]) = —1;

printf("\n");

}

getch(); )

char newlevel(void) {

char di[8]={-2,-2,-l,-l, 1,1, 2,2};

char dj[8]={-l, l,-2, 2,-2,2,-1,1};

char f;

xod=0;

for(i=0; i<8; i++)

for(j=0; j<8; j++)

if (a[i] [j]==k)

for(f=0; f<8; f++)

try(i+di[f],j+dj[f]);

k++;

return xod; }

void tryfint p,int q) {

if(p>=0 && p<8 && q>=0 && q<8 && a[p][q]<0)

{ a[p][q]=k+l;

xod=l;} }

Программа 4_06.pas

program horst;

{=======================================

Построение полей досягаемости ходом коня из заданной позиции.

Индексы позиций задаются от 0 до 7. Поле, из которого конь начинает, помечается уровнем 0. Поля, достигаемые после первого хода, помечаются уровнем 1, после второго хода - уровнем 2 и т. д.




Содержание  Назад  Вперед