n Эта позиция не сводится
int x0=l,y0=2;
int from;
void main() {
strcpy(&tree[0][0],"BASIC*");
ind[0]=-l;
clrscr();
printf("Введите строку с исходной позицией - ");
scanf("%s",pos0);
for(from=0; from<nmax; from++) level();
poisk () ;
getch ();
}
//---------------------------------
void level() {
for{k=0; k<6; k++)
if(tree[from][k]=='*')break;
i=k/3; //номер строки
j=k%3; //номер столбца
change (i-1,j);
change(i+1,j);
change(i,j-1);
change(i,j+1); }
//-------------------------------------
void change(int i1, int j1) { char tmp,str2[7];
int n,kl;
if(il<0 || i1>l || jl<0 | | jl>2) return;
kl=il*3+jl;
strcpy(str2, (char*)street from][0]);
tmp=str2[k]; str2[k]=str2[kl]; str2[kl]=tmp;
for(n=0; n<nmax; n++)
if(strcmp(str2,(char*)&tree[n][0])==0) return;
ind[nmax] =f rom;
strcpy((char*)stree[n] [0] , str2);
nmax++;
}
//--------------------------------------
void poisk() { char *p;
p=Stree[0][0] ;
for(int q=0; q<nmax; q++)
if(strcmp(pos0,p+q*7)==0) goto m;
printf("\ n Эта позиция не сводится к требуемой");
return;
m:
print_tab(p+q*7) ;
q=ind[q];
if(q>=0) goto m;
return;
}
//-------------------------------------------
void print_tab(char* s) { char top[]= "+-+-+-+";
charmid[]= "+-+-+-+";
char bottom[]="+-+-+-+";
gotoxy(x0,y0);
printf("%s",top);
gotoxy(x0,y0+l) ;
printf("|%c|%c!%c|",s [0],s [1],s [2]);
gotoxy(x0,y0+2);
printf("%s", mid);
gotoxy(x0,y0+3);
printf(";%ci%ci%c!",s[3],s[4],s[5]);
gotoxy(x0,y0+4);
printf("%s",bottom);
x0=x0+10;
if(x0==81){y0=y0+5;x0=l;} }
Программа 6_01.pas
program basic; uses Crt;
var
tree:array [0..359] of string[6];
pos0:string[6];
ind:array [0..359] of integer;
x0,y0,i,j,k,nmax,from:integer;
procedure print_tab(s:string);
begin
gotoxy(x0,y0);
write{'+-+-+-+' );
gotoxy(x0,y0+1);
write {' |',s[l],'|',s[2],'|',s[3],'|');
Содержание Назад Вперед